bind , call and apply

之前記錄過神奇的this,我們要想隨着自己的意願掌控this,那就需要這三個小幫手,哈哈,bind call and apply.

look a example please:

var a = {
    user:"路飛",
    fn:function(){
        console.log(this.user);
    }
}
var b = a.fn;
b(); //undefined
b.call(a);//路飛
b.apply(a);//路飛
var a = {
    user:"路飛",
    fn:function(e,ee){
        console.log(this.user); //路飛
        console.log(e+ee); //3
    }
}
b.call(a,1,2);
b.apply(a,[1,2]);
var arr = [500,20];
b.apply(a,arr);

如果直接運行b();輸出的一定是undefined.

call(a,b,c,d)有多個參數,a:要將b添加到哪個環境中,this就會指向這個對象,剩下的參數任意。

apply和call類似,只是參數的形式不同而已,它的第二個參數要求一定是數組。

注意如果call和apply的第一個參數寫的是null,那麼this指向的是window對象

bind的用法和它們兩個略有不同

var a = {
    user:"路飛",
    fn:function(){
        console.log(this.user);
    }
}
var b = a.fn;
b.bind(a);
這樣是輸不來結果的,這就是bind和call、apply方法的不同,實際上bind方法返回的是一個修改過後的函數
var a = {
    user:"路飛",
    fn:function(){
        console.log(this.user); //路飛
    }
}
var b = a.fn;
var c = b.bind(a);
c();
同樣bind也可以有多個參數,並且參數可以執行的時候再次添加,但是要注意的是,參數是按照形參的順序進行的。
var a = {
    user:"路飛",
    fn:function(e,d,f){
        console.log(this.user); //路飛
        console.log(e,d,f); //10 1 2
    }
}
var b = a.fn;
var c = b.bind(a,10);
c(1,2);
call和apply都是改變上下文中的this並立即執行這個函數,bind方法可以讓對應的函數想什麼時候調就什麼時候調用,並且可以將參數在執行的時候添加,這是它們的區別,根據自己的實際情況來選擇使用。接到的參數的使用是類似。的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章