No ECMAScript V3, esses dois métodos são definidos para o protótipo da função. As funções desses dois métodos são iguais: o uso desses dois métodos pode chamar funções como chamar outros métodos de objeto. Esta frase foi copiada do livro, pelo menos eu não entendi o que isso significa.
Vamos falar sobre simples e fácil de entender. Vamos primeiro olhar para o código:
A cópia do código é a seguinte:
Função Introdução (nome, idade)
{
document.write ("Meu nome é"+nome+". Eu sou"+idade);
}
var p = new People ();
Introdução.call (P, "Windking", 20);
Vamos falar sobre o código acima. Após o uso da chamada, a introdução se torna o método da p. Gostaria de saber se você entende isso? Usando o método de chamada, o código acima é equivalente a este código:
A cópia do código é a seguinte:
função pessoas (nome, idade)
{
this.name = nome;
this.age = idade;
this.Introduce = function () {
document.write ("Meu nome é"+nome+". Eu sou"+idade);
};
}
Você entende o significado? aplique a mesma função.
Ok, não importa o que esse método possa ser usado na prática, vamos falar primeiro sobre a gramática.
A chamada aceita pelo menos um parâmetro. O primeiro parâmetro da chamada refere -se ao objeto que você precisa. Por exemplo, no exemplo acima, o método de introdução espera que ele possa ser chamado pelo objeto P, portanto, P é usado como o primeiro parâmetro da chamada. O número restante de parâmetros é arbitrário e é usado como um parâmetro do método de introdução. A ordem está na ordem declarada pelo parâmetro Introduce. Por exemplo, Introduce.Call (P, "Windking", 20), se Introduce é um método de exemplo de p, então é isso que significa: P.Introdução ("Windking", 20). Você entende? Lembre -se de que a ordem dos parâmetros recebidos deve ser consistente com os parâmetros da declaração da ordem de função.
Depois de entender a chamada, o método de aplicação é fácil de entender. A única diferença entre aplicar e chamada é que a chamada aceita pelo menos um parâmetro, enquanto o aplicativo aceita apenas dois parâmetros. O primeiro parâmetro é o mesmo que a chamada e o segundo parâmetro é um conjunto com subscritos. Por exemplo, introdução.call (p, "windking", 20) pode ser reescrito em introdução.apply (p, ["windking", 20]). Você entende desta vez?
Então, quais são os usos desses dois métodos? Se queremos apenas implementar a função acima, não é melhor implementar a introdução como pessoas?
Eu resumi o aplicativo em dois:
1. Método de compartilhamento. Vejamos o código primeiro:
A cópia do código é a seguinte:
Função Introdução (nome, idade)
{
document.write ("Meu nome é"+nome+". Eu sou"+idade);
}
Este é um método de auto-introdução. Agora, digamos que temos aula de um menino e uma aula de menina (eu sou apenas para demonstração aqui, na prática, a classe dos pais do povo será usada), porque a introdução deles é a mesma, para que possamos compartilhar esse método.
A cópia do código é a seguinte:
função menino ()
{
this.boyintroduce = function () {
Introdução.call (este, nome, idade);
};
}
Da mesma forma, o mesmo é verdadeiro na garota, para que possamos evitar escrever código. Na verdade, isso é um pouco absurdo, porque podemos escrever como:
A cópia do código é a seguinte:
função menino ()
{
this.boyintroduce = function () {
Introdução (nome, idade);
}
}
Mas neste momento, se usarmos o aplicativo, ele ficará muito mais simples:
A cópia do código é a seguinte:
função menino ()
{
this.boyintroduce = function () {
Introdução.Apply (isto, argumentos);
};
}
Não é muito mais simples? Se houver muitos parâmetros, você não precisará escrever uma série de parâmetros densos!
2. Chamada de domínio cruzado
Veja um exemplo simples (apenas para demonstração, sem valor):
A cópia do código é a seguinte:
função menino (nome, idade)
{
this.boyintroduce = function () {
document.write ("Meu nome é"+nome+". Eu sou"+idade);
}
}
Função Girl (nome, idade)
{
}
Este é um menino e uma aula de meninas, e então escrevemos o seguinte código:
var b = novo garoto ("Windking", 20);
B.BoyIntroduce ();
Não há objeção a isso. Suponha que haja uma garota que queira se apresentar um dia e usá -la por acaso, então não há necessidade de modificar a aula de meninas, porque outras garotas são tímidas e não gostam de se apresentar. Então eu posso fazer isso neste momento.
var g = New Girl ("Xuan", 22);
Introdução.call (G, "Xuan", 22);
3. Uso real - herança
Ok, os acima são todos pequenos truques, e não é um lugar de elegância. Abaixo está a chamada e a aplicação mais amplamente usada, que é usada para herança estrutural.