JavaScript関数はオブジェクトを呼び出すことができ、オブジェクトです。これは、関数オブジェクトのサブタイプです。typeof functionName === "object"
また、この点を示しています。Functionオブジェクトがメソッドを含むことができ、我々は今日議論する必要があり、コール、適用し、バインドメソッドの機能があります。
-
任意の関数は、オブジェクトは、オブジェクトにこの点が拘束されることを関数内部メソッド呼び出しの関数として、この方法は、そのオブジェクトの関数ではない後でも、任意のオブジェクトを呼び出すための方法として使用することができます。
-
間接関数を呼び出すメソッド呼び出しの形で、物体として見メソッドをコールし、適用します。
-
最初の引数は、これらの2つの方法とは異なる親オブジェクトを呼び出すための機能である)(()を呼び出して適用することで、パラメータパッシングの異なる形式こと。
-
第1のパラメータ値以外のパラメータに加えて、呼び出しは()と呼ばれる関数に渡されます。
-
配列に渡された()関数呼び出しのパラメータを適用します。
-
このバインドメソッドの主な役割は、オブジェクトに関数をバインドします。場合バインド(F関数の呼び出し)()メソッドにパラメータとしてオブジェクトoを渡し、この方法は、新しい関数を返します。新しい関数がコールする方法として、元の関数f()Oを呼び出します。新しい関数に渡された引数は、元の関数に渡されます。着信バインド()の引数は、これにバインドされます。
メソッド呼び出しの例が適用されます。
//要想以对象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
通話アプリケーション、直接文字列配列の結合方法を呼び出します。
//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
バインドする方法の例:
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
callメソッドによって、我々は、文脈の異なる方法を持っている別の変数の型を呼び出すために行くことができます。