JavaScript:関数の2つの非継承方法apply()、call()、およびES 5のbind()
1144 ワード
このcall()、appy()の2つの方法は同じ役割をしています.呼び出したい関数を変更するためのスコープです.それらの違いはパラメータの受け取り方です.bing()の役割は結合作用ドメインである. appy()は2つのパラメータを受け入れる.最初のパラメータは、スコープです.第二のパラメータは、Arayに導入された要素は、呼び出される関数のパラメータであり、また、直接にアーグメンントオブジェクトを伝えることができる である. call()は、appyとは違って、第二のパラメータの開始であり、彼はArayに入るのではなく、パラメータを一つずつ列記する、すなわちcallのパラメータは一定ではない. bind()
function sum(num1, num2){
return num1 + num2;
}
function callSum(num1, num2){
return sum.apply(this, [num1, num2]);
//or
//return sum.apply(this, arguments);
}
function callSum(num1, num2){
return sum.call(this, num1, num2);
}
PS:上の例でも入ってきた作用域はthisですが、この二つのcalSum関数は全体的な作用領域で呼び出されます.つまり、thisオブジェクトはwindowです.window.color = "red";
var obj = { color: "blue" };
function sayColor(){
console.log(this.color);
}
sayColor.call(this); //red
sayColor.call(window); //red
sayColor.call(obj); //blue
上記の例でも、call()とappy()の方法が一番大きいかどうかが分かりますが、関数を変えて実行する作用領域です.var temp = sayColor.bind(obj);
temp(); //blue
注意したいのは、bind()メソッドをサポートするブラウザには、IE 9+、Firefox 4+、Safari 5.1+、Opera 12+、Chromeがあります.