Показать сообщение отдельно
  #37 (permalink)  
Старый 28.08.2012, 15:59
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от platedz
1) мы передаем текущий объект в функцию f
текущий объект - это this. а в коде передаётся result.

Сообщение от platedz
При этом мне вовсе не яcно, как функция вообще получает elements. Т.к. попытка вызвать его вне метода не дает результата.
посредством замыкания.

Сообщение от platedz
Кроме прочего насколько я понимаю bind - это своего рода внутренняя функция, которую можно повторить и в устаревших браузерах.
функция, которая имеет примерно такой код (словами объяснять долго):

кроме того, bind имеет некоторые особенности, которые не реализуемы посредством JavaScript (другими словами, полного костыля не получится создать.).. об особенностях посмотрите в интернете.
/*  ----------  ОПИСАНИЕ  ---------- */

Function.prototype._bind = function (context /*, arg0, arg1, ... argN */) {
    
    // сохраним переданные аргументы в замыкании. Именно "1", потому что нулевой элемент - контекст.
    var args = Array.prototype.slice.call(arguments, 1);

    // сохраним текущую функцию в замыкании, ибо ...
    var func = this; 

    // ... в этой функции this уже будет window (по-умолчанию, во всех функциях так).    
    return function () {

        // преобразуем объект текущих аргументов в массив
        var newArgs = Array.prototype.slice.call(arguments);

        // добавим к переданным вначале аргументам переданные сейчас.
        newArgs = args.concat(newArgs);

        // и вызовем apply, передав контекст, и аргументы.
        func.apply( context, newArgs );

    };
};

/*  ----------  ТЕСТИРОВАНИЕ  ---------- */

// функция просто выведет алертом свойство "FOO" своего контекста, добавив к нему первый аргумент, и второй.
// this сейчас равен window (по-умолчанию).
var test = function (first, second) {  alert( this.FOO + first + second );  };

// объект со свойством "FOO"
var obj = {  "FOO": "Hello" };

// применим связывание.
// this в test_binded будет равен obj.
// а первый аргумент ( first в функции "test" ) будет равен строке ", "
var test_binded = test._bind( obj, ", " );

// вызовем связанную функцию, передав ей ещё один аргумент ( это уже будет "second" )
test_binded( "World!" );

// Связывание и вызов связанной функции аналогичны этой строке :
test.call( obj, ", ", "World!" );

Последний раз редактировалось melky, 28.08.2012 в 16:03.
Ответить с цитированием