Сообщение от 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!" );