A função JavaScript é um objeto, um objeto pode ser chamado. É um sub-tipo do objecto função. typeof functionName === "object"
Também ilustra este ponto. objeto de função pode conter métodos, é chamada, aplicar e funções Método de vinculação que temos para discutir hoje.
-
Qualquer função pode ser utilizada como um método para ligar a qualquer objeto, mesmo depois de este método não é a função de esse objecto, o objecto, como uma função de chamada do método dentro de uma função este facto aponta para o objecto a ser ligado.
-
ligar e aplicar métodos vistos como um objecto, sob a forma de chamada de método para as funções de chamada indirectamente.
-
chamar () e aplicar () O primeiro argumento é a função de chamar o objecto principal é, diferente a partir destes dois métodos é que uma forma diferente de passagem de parâmetros.
-
call (), além de outros parâmetros do que o primeiro valor do parâmetro é passado para a função chamada para ser.
-
aplicar () parâmetros de chamada de função passados em uma matriz.
-
O principal papel deste método de ligação se liga a uma função a um objecto. Quando a chamada da função f bind () no método () e passando um objeto o como um parâmetro, este método retorna uma nova função. A nova função irá chamar a função original f () o como uma forma de chamar. Quaisquer argumentos passados na nova função será passada a função original. se ligam de entrada () argumentos vai ser ligado a este.
Exemplos da chamada do método e aplicar:
//要想以对象o的方法调用函数f(),并传递参数1,2,可以这样做:
var o = { a : 1 }
function f( x , y ){
console.log( this.a + x + y )
return 124
}
//f()函数被执行,this指向对象o,this.a === 1
f.call(o,1,2); //4
//返回值是函数的返回值
var result = f.call(o,1,2) //result === 124
f.call(o,1) //NaN ,未传入y,y为undefined
//调用的对象方法不变
console.log(o); //{a:1}
console.log(o.f === f); //false
f.apply(o,[1,2]); //4
aplicação chamada, chamar o método da matriz de cadeia directamente juntar-se:
//join:将数组的元素根据传入的参数进行拼接返回拼接后的字符串
var a = "foo";
//直接调用时字符串没有join方法
console.log(a.join); //undefined
//通过call去调用Array对象的方法
var c = Array.prototype.join.call(a, "-");
console.log(c); //f-o-o
Exemplo ligam método:
var sum = function(x, y) {
console.log(this.a, x, y);
return this.a + x + y; //this由调用时决定,由下文可知,this指向o对象
};
var o = { a: 1 };
var targeFun = sum.bind(o, 2); //2传入到 x 位置,下面调用传入的3 传入到 y 位置
var m = targeFun(3); //1,2,3
console.log(m); //6
Pelo método de chamada, nós podemos ir para chamar diferentes tipos de variáveis tem diferentes métodos de contexto.
Referência:
Guia JavaScript Definitive