JavaScript 中,某個函數的參數數量是不固定的,因此要說適用條件的話,當你的參數是明確知道數量時,用 call,而不確定的時候,用 apply,然后把參數 push 進數組傳遞進去。當參數數量不確定時,函數內部也可以通過 arguments 這個數組來便利所有的參數
老是忘掉這兩個東東的用下,寫下來做個記錄吧。
他們作用是一模一樣的,只是傳入的參數不一樣
apply
apply接受兩個參數,第一個制定了函數體內this對象的指向,第二個參數為一個帶下標的集合(可遍歷對象),apply方法把這個集合中的元素作為參數傳遞給被調用的函數:
var func = function(a, c, c){
alert([a,b,c]); //[1,2,3]
}
func.apply(null, [1,2,3]);
call
call傳入的參數不固定,和apply相同的是,第一個參數也是代表函數體內的this指向,第二個參數開始往后,每個參數被依次傳入函數:
var func = function(a, b, c){
alert([a,b,c]); //[1,2,3]
}
func.call(null, 1,2,3);
call是aplly的一顆語法糖。如果第一個參數為null,函數體內的this指向宿主對象,在瀏覽器中是window。
call和apply的用途
1.改變this指向
上面的例子就是啦
2.Function.prototype.bind
模擬Function.prototype.bind
Function.prototype.bind = function(context){
var self = this;
return function(){
return self.apply(context, arguments);
}
};
var obj = {
name: 'cxs'
};
var func = function(){
alert(this.name); //cxs
}.bind(obj);
fun();