Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   не могу понять этот код (https://javascript.ru/forum/misc/67326-ne-mogu-ponyat-ehtot-kod.html)

nologinname 10.02.2017 18:49

не могу понять этот код
 
({1:[function(_dereq_,module,exports){ ///function code },{}],2:[]})

не понимаю зачем так сделано, и как вызвать данную функцию, если выражение ни к чему не приравнивается....


данный код является частью hls.js файла библиотеки обработки HLS (https://cdn.jsdelivr.net/hls.js/latest/hls.js)

TestUser013 12.02.2017 12:37

По сути это объект с массивами функций. Если взять только тот кусок, что вы скинули, то функцию можно будет вызвать вот так:

obj = ({1:[function(_dereq_,module,exports){ ///function code },{}],2:[]});

obj[1][1](_dereq_, module, exports);

nologinname 13.02.2017 12:55

это всё именно так, но, как я и гововрил, этот объект не приравнивается к переменной...
и, на сколько я понимаю, сначала идёт объект, а в нём массив, сл-но синаксис выше не сработает... obj.1[1] - имя объекта не может быть цифрой

ksa 13.02.2017 13:52

Цитата:

Сообщение от nologinname
это всё именно так, но, как я и гововрил, этот объект не приравнивается к переменной...

Ты не видишь всей картины... :)

Ты привел лишь огрызок кода и не показал всей т.с. конструкции. ;)
Ты показал лишь концовку конструкции

(function(){})();

Т.е. запуск анонимной функции. :)
В круглых скобках передаются параметры для запуска анонимной функции. Внутри нее будут доступны параметры с именами...

Пример
(function(Obj){
   Obj[1]();
})({1:function(){alert('ok')}});

ksa 13.02.2017 13:53

Цитата:

Сообщение от nologinname
не понимаю зачем так сделано

Ждедай стайл граничащий с нидзя кодом... :D

nologinname 13.02.2017 21:47

весь код в ссылке под первым постом...

вот часть..

({1:[function(_dereq_,module,exports){

function EventEmitter() {
this._events = this._events || {};
this._maxListeners = this._maxListeners || undefined;
}
и т.д.
})

fuckingquest 14.02.2017 00:46

это скорей всего что-то связанное с eval, возможно этот код приводится к строчному представлению и эвалится
ob1 = eval("{a: 1}")
ob2 = eval("({a: 2})")

console.log(ob1, ob2)

//>>>> 1 { a: 2 }

nologinname 14.02.2017 01:32

Цитата:

Сообщение от fuckingquest (Сообщение 444230)
это скорей всего что-то связанное с eval, возможно этот код приводится к строчному представлению и эвалится
ob1 = eval("{a: 1}")
ob2 = eval("({a: 2})")

console.log(ob1, ob2)

//>>>> 1 { a: 2 }

не думаю... если глянуть исходник, там всё совсем не так...

nologinname 20.02.2017 17:51

http://www.adequatelygood.com/JavaSc...-In-Depth.html
вот ответ, на вопрос, о синтаксисе )))


Часовой пояс GMT +3, время: 16:18.