O uso das três funções chama, aplica e vincula é um ponto de conhecimento que não pode ser superado aprendendo o idioma do JavaScript. Deixe -me resumir o uso dos três e dos cenários de aplicação comuns.
Primeiro, observe a função de chamada, que pode ser entendida como "empréstimos" e "solicitação". Imagine o seguinte cenário: você está vagando sozinho e deseja ligar para casa se tiver assuntos urgentes, mas, infelizmente, seu telefone está devido, ou está sem energia, ou cai em um poço. Em suma, seu telefone simplesmente não está funcionando. Mas você precisa fazer essa chamada, para que você possa emprestar o telefone celular de um amigo, o telefone celular de um vizinho ou um telefone público. Dessa forma, você pode concluir a chamada sem que seu telefone esteja disponível. Quanto ao telefone que você usa, não importa. De qualquer forma, é o mesmo efeito que fazer uma chamada com seu próprio telefone. A intenção original da função de chamada também é semelhante a isso. Deixe -me usar o código para simular seu cenário de aplicativo:
var sag = {nome: 'sapo', digamos: function () {alert (this.name); }} var rabbit = {name: 'Rabbit'} sag.say.call (rubbit) // coelhoRubbit é um objeto idiota, mas se ele quiser dizer seu nome, é impossível alcançá -lo com sua própria capacidade. Felizmente, ele tem um bom amigo chamado Frog, que pode falar. Então, Rubbit pediu a Frog para perceber esse desejo. O primeiro parâmetro de sapo.say.call () deve ser preenchido na pessoa que emitiu a solicitação, e o advogado gosta de chamá -lo de cliente. Aqui está o Rubbit Solicy Frog para dizer o nome, então preencha o Rubbit. Dessa forma, ao dizer, o nome do Rubbit será pesquisado em vez do nome do sapo. Como seria se eu preenchesse o sapo aqui? É como se pedir para fazer algo e se alimentar de sal. Você pode tentar:
var sag = {nome: 'sapo', digamos: function () {alert (this.name); }} var rabbit = {name: 'Rabbit'} sag.say.call (sapo) // sapoAlimentar a si mesmo um saco de sal deve ser o seu nome, e isso não é nada inesperado. Vamos dar uma olhada no uso clássico de chamada:
// Converter parâmetros em função de objeto de matriz real sapo () {var arr = [] .slice.call (argumentos); console.log (argumentos.slice, arr.slice) // Função indefinida Slice () {[Código nativo]}} sapo (1,2,3,4)Após essa chamada, podemos usar o objeto Argumentos como um objeto de matriz. Existem muitas maneiras de usar a chamada. Se você abrir o código -fonte do jQuery, poderá encontrar facilmente muitos lugares para usá -lo. Não vou listá -los todos aqui, mas voltarei à cena diante de nós. É muito simples emprestar um telefonema. Depois de fazer um telefonema, definitivamente vou querer trazer algo de volta. Afinal, eu estou vagando há tantos anos e não fui filial para os idosos e comprei algumas especialidades locais para voltar. É definitivamente ótimo. No entanto, a pressão da vida lá fora é tão grande que, além de trabalhar, também há horas extras todos os dias. Se você se despedir, não apenas o seu salário será deduzido, mas também precisará gastar muitas despesas de viagem. A soma desse dinheiro provavelmente é suficiente para os idosos passarem um ano em casa. Não foi econômico pensar sobre isso, então pensei na função de chamada novamente. Pedindo ajuda, é uma escolha muito sábia recuperá -la, e não cobra, não limita a quantidade, não limita o peso e pode trazer o máximo que você tem. Vou usar o código para demonstrá -lo novamente:
var sag = {nome: 'sapo', envio: função (dinheiro, comida, leite, suagate) {alert (dinheiro+alimento+leite+suagate); }} var rabbit = {name: 'Rabbit'} sag.send.call (Rubbit, 'Money', 'Food', 'Milk', 'Suagate')Se você é rico e voluntário, pode até enviar alguns iPhone6 Plus ou algo de volta. .^_^.
Falando nisso, a ligação está quase acabando. Não sei se o drama da cena acima faz você entender qual é a chamada. Se apenas despertar sua saudade de casa, sinto muito.
A chamada também tem um meio-irmão chamado Apply. Se você entende o uso da chamada, a aplicação é realmente a mesma coisa. A única diferença é que, quando a aplicação não gosta de transmitir as coisas, parece muito problemático colocar uma coisa em uma bolsa e não é ecológica. Então, ele forneceu uma caixa grande para as coisas e apenas colocou todas as coisas que você deseja transmitir na caixa que ela forneceu. Esta grande caixa é uma matriz. Se o exemplo acima for feito com a aplicação, é assim:
var sag = {nome: 'sapo', envio: função (dinheiro, comida, leite, suagate) {alert (dinheiro+alimento+leite+suagate); }} var rabbit = {name: 'rabbit'} // preste atenção à diferença nos parâmetros sag.send.apply (rubbit, ['dinheiro', 'comida', 'leite', 'suagate']))O exposto acima é a vida passada e presente da aplicação, chamada. Mas, inesperadamente, aplicar e o pai de Call fez uma fortuna em imóveis há alguns anos, e havia um filho ilegítimo chamado Bind do lado de fora. Embora seus dois irmãos tenham chamado e apliquem estreou alguns anos depois, suas habilidades não devem ser subestimadas. No entanto, sua identidade não é reconhecida em alguns lugares. Por exemplo, ie6. Em seguida, usarei o código para demonstrar suas habilidades:
var name = 'Rubbit'; var sag = {nome: 'sapo', digamos: function () {setTimeout (function (dinheiro, leite) {alert (this.name+dinheiro+leite)} .bind (this, 'dinheiro', 'leite'), 1000)}} sag.say ();Através da comparação, verificou -se que o bind pode ser diretamente conectado ao function () {}. É equivalente a salvar chamadas e aplicar e especificar diretamente o principal e os parâmetros a serem passados após a função. Em termos de estilo de passar ao Sigma, é mais como uma chamada.
Em relação ao Bind, vamos dar uma olhada em outro uso clássico:
var obj = {nome: 'sapo'} document.addeventListener ('click', function () {alert (this.name); // sapo} .bind (obj), false);Para resumir, aplicar, chamar, amarrar, as semelhanças entre esses três irmãos são:
1. O primeiro parâmetro é o escopo do governo, ou seja, cujo território é o trabalho.
2. Todos os parâmetros podem ser passados
As diferenças são:
Aplicar, a chamada tem melhor compatibilidade, vincular algumas versões mais baixas dos navegadores não a suportam.
Os parâmetros aprovados pelo Aplicação devem ser envolvidos em uma matriz, enquanto a chamada e a ligação são listadas uma a uma.
Você conseguiu uma compreensão mais profunda do uso das três funções chamadas, aplicar e vincular? Espero que este artigo possa ser útil para você.