【常忘系列1】—Function.prototype裏面的call和apply

總是忘掉這兩個東東的用下,寫下來作個記錄吧。
他們做用是如出一轍的,只是傳入的參數不同瀏覽器

apply
apply接受兩個參數,第一個制定了函數體內this對象的指向,第二個參數爲一個帶下標的集合(可遍歷對象),apply方法把這個集合中的元素做爲參數傳遞給被調用的函數:app

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。this

call和apply的用途
1.改變this指向
上面的例子就是啦prototype

2.Function.prototype.bind
模擬Function.prototype.bindcode

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();
相關文章
相關標籤/搜索