1. Это анонимная функция-выражение, которая сразу же вызывается.
// вот функция.
(function(){
})
// тут же ее вызов с аргументом blabla
(blabla)
Почему функция берется в скобки: есть два типа функций: функция-выражение, и декларация функции. Скобки просто подсказывают js-интерпретатору что это функция-выражение.
Декларация по сути как бревно, должна иметь имя и ее нельзя вызвать незамедлительно. Ее нельзя объявлять, скажем внутри блоков типа if..else и т.п. Смахивает на методы в C#.
Функция-выражение не требует имени, может передаваться аргументом. Типа лямбды в C#.
Вместо blabla у тебя передается опять же функция-выражение.
2. Результат всех этих манипуляций - переменная factory, ссылающаяся на функцию (ту, что вместо blabla). Далее, если доступна модульная система amd, то регистрируем эту функцию как модуль, иначе тут же вызываем.
3. method - это тупо строка. Допустим в качестве method нам передали строку 'fnname1'.
Тогда получаем methods['fnname1'], что тоже самое что и понятное тебе methods.fnname1. Короче чета типа Reflection из C# (слышал мельком). Только тут это называется dynamic lookup и используется повсеместно (хотя по возможности нужно избегать, ибо ломает оптимизации js-движка)
Переменная arguments доступна внутри любой функции и содержит аргументы.
Array.prototype.slice.call(arguments, 1) - тут получаем массив, содержащий второй и последующие аргументы. Если бы arguments являлся бы инстансом "класса" Array, то можно было бы писать arguments.slice(1).
fn.apply(context, [bla, bla]) - почти тоже самое что и fn(bla, bla), только устанавливает нужный контекст (ключевое слово this).
This в js - штука необычная, обязательно прочитай про него тут на сайте или где-нибудь еще. Хотя по сути все просто:
если вызываешь instance.method() - то this будет ссылаться на instance. Если вызываешь fn() - то this ссылается на глобальный объект (в браузере это window). Если при вызове используешь .call(context) или .apply(context) - то this ссылается на context.
Есть еще .bind(context) - вернет новую функцию, навсегда привязанную к контексту context.
__________________
В личку только с интересными предложениями
|