1. Definição do método
Método de chamada:
Sintaxe: Call ([ThisObj [, Arg1 [, Arg2 [, [, .argn]]]]])
Definição: Chame um método de um objeto para substituir o objeto atual por outro objeto.
ilustrar:
O método de chamada pode ser usado para chamar um método em vez de outro objeto. O método de chamada altera o contexto do objeto de uma função do contexto inicial para um novo objeto especificado por ThisObj.
Se o parâmetro ThisOBJ não for fornecido, o objeto global será usado como thisObj.
Aplicar método:
Sintaxe: Aplicar ([ThisObj [, Argarray]]))
Definição: aplique um método de um determinado objeto e substitua o objeto atual por outro objeto.
ilustrar:
Se o Argarray não for uma matriz válida ou não for um objeto de argumentos, um TypeError será gerado.
Se nenhum argumento for fornecido, o objeto global será usado como thisObj e não puder ser transmitido por nenhum argumento.
2. Exemplos comuns
um.
A cópia do código é a seguinte:
função add (a, b)
{
alerta (a+b);
}
função sub (a, b)
{
alerta (AB);
}
add.call (sub, 3,1);
O significado deste exemplo é substituir o sub Add, Add.Call (sub, 3,1) == Add (3,1), então o resultado em execução é: Alert (4); // Nota: a função no JS é na verdade um objeto, e o nome da função é uma referência ao objeto de função.
b.
A cópia do código é a seguinte:
função animal () {
this.name = "animal";
this.showname = function () {
alerta (this.name);
}
}
function Cat () {
this.name = "cat";
}
var animal = novo animal ();
var cat = new Cat ();
// Através do método de chamada ou aplicação, o método mostrado () originalmente pertencente ao objeto animal é entregue ao gato do objeto para uso.
// O resultado da entrada é "gato"
Animal.ShowName.Call (Cat, ",");
//animal.showname.apply (gat, []);
Chamada significa colocar o método animal no gato para executar. Acontece que o CAT não possui um método mostrado (). Agora, colocando o método Animal Shallame () no CAT para executar, então este. Nome deve ser gato
c. Perceber herança
A cópia do código é a seguinte:
função animal (nome) {
this.name = nome;
this.showname = function () {
alerta (this.name);
}
}
função gat (nome) {
Animal.Call (este, nome);
}
var gat = novo gato ("Black Cat");
cat.showName ();
Animal.Call (isto) significa usar objeto animal em vez deste objeto. Então não existe todas as propriedades e métodos de animal em gato? O objeto CAT pode chamar diretamente de métodos e propriedades animais.
d. Herança múltipla
A cópia do código é a seguinte:
função classe10 ()
{
this.showsub = função (a, b)
{
alerta (AB);
}
}
função classe11 ()
{
this.showadd = função (a, b)
{
alerta (a+b);
}
}
função classe2 ()
{
Class10.Call (this);
Classe11.call (this);
}
É muito simples, usando duas chamadas para obter uma herança múltipla
Obviamente, existem outros métodos para herdar JS, como o uso de cadeias de protótipo, que não se enquadram no escopo deste artigo, mas apenas explica o uso da chamada aqui. Falando em escala, é claro que também é aplicado. Esses dois métodos basicamente significam a mesma coisa. A diferença é que o segundo parâmetro de chamada pode ser de qualquer tipo, enquanto o segundo parâmetro de aplicação deve ser uma matriz ou argumentos
E Callee, chamador ..
Resumir:
Simplificando: semelhanças: os efeitos dos dois métodos são exatamente iguais
Pontos diferentes: os parâmetros passados pelo método são diferentes