Прокладка ES5 для функций привязки — это Javascript

StackOverflow https://stackoverflow.com//questions/9667284

  •  12-12-2019
  •  | 
  •  

Вопрос

Ниже приведена прокладка 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 может оказаться довольно сложной задачей;для подробного объяснения прочтите эту статью.

Все, что вы хотели знать об области JavaScript.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top