Método de chamada de função
Antes de falar sobre os três irmãos se inscrevem, ligue e vinculam em JavaScript, gostaria de falar sobre quais são os métodos de chamadas de funções:
• como uma função
• como um método
• Como construtor
• Ligue indiretamente através de seus métodos de chamada () e aplicar ()
Todos sabemos os três métodos anteriores de chamada e não estamos dentro do escopo deste artigo, por isso não falaremos sobre eles.
Vamos falar sobre o método de quarta chamada
Chamadas indiretas via chamada () e aplicativo ()
De fato, podemos considerar essas duas funções como métodos de um determinado objeto e indiretamente chamar a função chamando o método:
função f () {} f.call (o); f.Apply (O);O primeiro parâmetro de Call () e Apply () é o objeto pai para chamar a função. É o contexto de chamada e uma referência a ele é obtida através disso no corpo da função.
Então, eles são iguais, ou existem diferenças e também o método de ligação? Não se preocupe, vamos analisar as diferenças e conexões entre os três abaixo em detalhes.
chamar()
O método Call () especifica um ponteiro específico (idiota, não me incomoda com a correção) e os parâmetros para o método que o chama. Por exemplo, há uma função como esta:
var fn = function (arg1, arg2) {console.log (this, arg1, arg2); }Vou chamá -lo:
fn.call (null, 'skylor', 'min'); //1fn.call(ndefined, 'Skylor', 'min'); // 2var fx = function () {} fn.call (fx, 'skylor', 'min'); // 3Quais são os valores de retorno desses três métodos de chamada? Sem bobagem, por favor, veja:
1. NULL "Skylor" "Min" 2. Indefinido "Skylor" "Min" 3. FX "Skylor" "Min"
Esse é realmente o caso? Você é inteligente, vá para o console do navegador e experimente. Eu vou, você é um trapaceiro, isso não é assim:
Chrome1. Janela "Skylor" "Min" 2. Janela "Skylor" "Min" 3. FX "Skylor" "Min"
OK, você é inteligente. Mas isso já ilustra o método de chamada muito bem. (A janela é muito avançada, a Microsoft está rindo ...)
Percebemos que o método de chamada, o primeiro parâmetro é especificar esse ponteiro e cada parâmetro após isso especifica os parâmetros necessários. Observe que eu uso "cada um", o que significa que você precisa de vários parâmetros e deseja chamar a função e escreva cada parâmetro, um por um.
aplicar()
Aplicar () é o irmão de Call (). Os outros lugares parecem iguais, todos são homens, mas são diferentes em um só lugar. Vamos dar uma olhada no exemplo primeiro:
fn.Apply (null, ['Skylor', 'min']); //1fn.apply(fx, ['skylor', 'min']); // 2
Irmão, você escreveu errado? Existem mais colchetes. Não, não, não, é isso que faz parecer diferente da chamada. Seu segundo parâmetro é a matriz de parâmetro necessária.
vincular()
bind (), eles não são três irmãos, eu entendo isso, Blabla ... não, não, é um irmão jurado que se tornou irmãos jurados com Aplicação e Call, não um irmão de verdade.
Obviamente, o método de ligação também permite especificar esse ponteiro, mas, em vez de chamar uma função, ele retorna uma função (ou uma cópia) que a chama e especifica um ponteiro e parâmetro específico para esta função. Convenção, exemplos ilustram tudo:
var fnbound = fn.bind (null, 'skylor', 'min');
Neste momento, o FNBound é uma função, outra função com isso apontando para nulo e os parâmetros são ['Skylor', 'min']. Chamado:
fnbound ();
resultado:
nulo, 'Skylor', 'min'
Não se preocupe com a janela comigo. . . . .
A diferença entre Bind e os outros dois irmãos é que ele não chama uma função, mas retorna uma nova função. Da mesma forma, ele também especifica este ponteiro e parâmetro. O método de especificar parâmetros é o mesmo que chamado e vem um a um.
Vamos ter um último exemplo:
var shoppingcart = (function () {var _calculateprice = function () {return this.price * this.amount;}; return {calcularprice: _calculateprice}}) (); var bens = {name: 'Hammer', preço: 199, valor: 2};;Isso termina. !
O exposto acima é o conteúdo inteiro de aplicar, chamar e vincular no JavaScript apresentado a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!