Vamos primeiro dar uma olhada na explicação oficial sobre Call (), "chamando um método de um objeto e substituindo o objeto atual por outro objeto". Depois de ler esta explicação, você pode ficar ainda mais confuso. Veja o exemplo:
A cópia do código é a seguinte:
var x = "Eu sou uma variável global"; // define variável global x
função a () {// define a estrutura da classe de função a
this.x = "Eu o declarei na estrutura da classe de função A";
}
// Defina uma função normal e coloque o valor da variável x contida no ponteiro atual.
função f () {
alerta (this.x);
}
// O valor de retorno é "Eu declarei na estrutura da classe de função A"
f.call (novo a ());
Meu entendimento é que o F.Call (novo a ()) é copiar a função (na verdade um objeto) f para o objeto chamado "novo a ()" para análise. De fato, é o mesmo que o resultado da análise do seguinte código:
A cópia do código é a seguinte:
função a () {
this.x = "Eu o declarei na estrutura da classe de função A";
alerta (this.x);
}
um();
Só que o escopo da variável x é diferente no momento. Sim ... parece ter um pouco de herança, não é? No exemplo acima, F é completamente herdado pelo objeto de força do construtor a. Se isso não for suficiente para mostrar que o A.Call (B) é um modo de herança, vejamos um uso mais herdado.
A cópia do código é a seguinte:
função f () {
this.a = "a";
this.b = function () {
alerta ("b");
}
}
função e () {
f.call (this);
}
var c = novo e ();
alerta (CA); // PoPt a
cb (); // PoPt b
Neste exemplo, enquanto amigos que sabem usar o navegador, eles podem ver que E herda completamente as propriedades e métodos de f, caso contrário, não será explicado, porque os atributos A e B não são definidos em e. Então, de acordo com o senso comum, essas duas propriedades não aparecerão no objeto C de e.