A introdução a Call () no site oficial de Mozilla é:
A cópia do código é a seguinte:
O método Call () chama uma função ou método com um valor especificado e vários valores de parâmetros especificados.
Call () Sintaxe
A cópia do código é a seguinte:
fun.call (thisarg [, arg1 [, arg2 [, ...]]])
Call () parâmetro
thisarg
A cópia do código é a seguinte:
Este valor especificado quando a função divertida está em execução. Deve -se notar que o especificado esse valor não significa necessariamente o valor real desse valor quando a função é executada. Se essa função estiver no modo não estrito, esse valor especificado como nulo e indefinido apontará automaticamente para o objeto global (o objeto de janela no navegador), e esse valor com o valor original (número, string, valor booleano) apontará para o objeto de embrulho automático do valor original.
arg1, arg2, ...
A cópia do código é a seguinte:
Lista de parâmetros especificados.
Call () Método em JavaScript
Não vamos prestar atenção às explicações complicadas acima, inicie esse processo passo a passo.
Exemplo de Call () Método
Então eu escrevi outro olá, mundo:
A cópia do código é a seguinte:
Função Print (P1, P2) {
console.log (p1 + '' + p2);
}
print ("Hello", "World");
print.call (indefinido, "Hello," World ");
Os dois métodos têm a mesma saída, no entanto, por outro lado, o método de chamada também passa um indefinido.
Em seguida, vamos olhar para outro exemplo.
A cópia do código é a seguinte:
var obj = function () {};
Função Print (P1, P2) {
console.log (p1 + '' + p2);
}
print.call (obj, "hello," mundo ");
Mas aqui, o que passamos ainda é indefinido, porque o indefinido no exemplo anterior é porque um parâmetro precisa ser passado. Não há reflexão real do uso da chamada aqui, veja um exemplo melhor.
A cópia do código é a seguinte:
função print (nome) {
console.log (this.p1 + '' + this.p2);
}
var H = {p1: "Hello", P2: "World", Print: Print};
h.print ("fd");
var h2 = {p1: "Hello", P2: "World"};
print.call (h2, "nada");
A chamada é chamada emprestando os métodos e objetos de outras pessoas, assim como chamar o seu. Em H.print, quando uma função é chamada de método, isso apontará para o objeto relacionado. Mas, neste exemplo, não entendemos se o H2 chamou impressão ou impressão chamado H2. Então eu citei o exemplo de mozilla
A cópia do código é a seguinte:
Produto da função (nome, preço) {
this.name = nome;
this.price = preço;
se (preço <0)
lançar rangeError ('não pode criar produto "' + nome + '" com um preço negativo');
devolver isso;
}
função alimento (nome, preço) {
Product.Call (este, nome, preço);
this.category = 'comida';
}
Food.prototype = new Product ();
Var Cheese = novo alimento ('Feta', 5);
console.log (queijo);
Aqui podemos realmente entender qual objeto chama qual método. No exemplo, as instâncias de objeto criadas usando o construtor de alimentos terão o nome e os atributos de preço adicionados no construtor do produto, mas o atributo de categoria é definido no respectivo construtor.
A cópia do código é a seguinte:
função print (nome) {
console.log (this.p1 + '' + this.p2);
}
var h2 = função (não) {
this.p1 = "hello";
this.p2 = "mundo";
print.call (isto, "nada");
};
h2 ();
Aqui o H2 é usado como receptor para chamar a função de impressão. Como no exemplo alimentar, em um construtor infantil, você pode implementar a herança chamando o método de chamada do construtor pai.
Quanto às vantagens do método de chamada, ele é introduzido em "JavaScript eficaz".
1. Use o método de chamada para personalizar o receptor para chamar a função.
2. Use o método de chamada para chamar um método que não existe no objeto especificado.
3. Use o método de chamada para definir funções de ordem superior que permitam aos usuários especificar os destinatários para funções de retorno de chamada.