Прокладка ES5 для функций привязки — это Javascript
Вопрос
Ниже приведена прокладка ES5 для привязки JS. Я не понимаю. себя.apply в связанной функции.Я знаю, как использовать метод apply, но где он? себя на что указываете в этом случае?Это должно было быть
функция, но здесь себя выглядит как объект.
if ( !Function.prototype.bind ) {
Function.prototype.bind = function( obj ) {
var slice = [].slice,
args = slice.call(arguments, 1),
self = this,
nop = function () {},
bound = function () {
return self.apply( this instanceof nop ? this : ( obj || {} ), // self in this line is supposed
to // represent a function ?
args.concat( slice.call(arguments) ) );
};
nop.prototype = self.prototype;
bound.prototype = new nop();
return bound;
};
}
Решение
имейте в виду, что в JavaScript почти все это объект.
Так что у вас есть это прямо там:
self= это
Итак, я не представляющий что-нибудь, self есть экземпляр.
Другие советы
self
используется в указанной вами прокладке, чтобы учесть тот факт, что this
изменения вместе с изменениями объема.В пределах прямой области действия функции Function.prototype.bind. this
будет ссылаться на объект, для которого была вызвана функция привязки.
Как только вы войдете в область вложенного bound
функция this
изменился;так автор задал self = this
в рамках bind
функция, позволяющая получить значение this
в то время bind
призван оставаться доступным для bound
функционировать посредством лексического охвата (замыкания).
Определение области действия в JavaScript может оказаться довольно сложной задачей;для подробного объяснения прочтите эту статью.