Pergunta

Abaixo está um calço ES5 para ligação JS. auto.apply na função vinculada.Eu sei como usar o método apply, mas onde está auto apontando neste caso?Era para ser um
função, mas aqui auto parece um objeto.

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;
        };
  }
Foi útil?

Solução

Tenha em mente que em javascript quase tudo é um objeto.

Então você tem isso aí:

eu = isso

Então, o eu não é representando qualquer coisa, eu mesmo é a instância.

Outras dicas

self está sendo usado no calço que você listou para acomodar o fato de que this mudanças junto com mudanças de escopo.Dentro do escopo direto da função Function.prototype.bind this se referirá ao objeto no qual a função de ligação foi chamada.

Depois de inserir o escopo do aninhado bound função this mudou;então o autor atribuiu self = this dentro do bind função para permitir o valor de this no momento bind é chamado a permanecer disponível para o bound função por meio de escopo lexical (fechamento).

A definição do escopo em JavaScript pode ser bastante complicada;para uma explicação detalhada, dê uma olhada neste artigo.

Tudo o que você queria saber sobre o escopo do JavaScript.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top