詳解javascript的bind方法

JS的bind() 方法建立一個新的函數,在 bind() 被調用時,這個新函數的 this 被指定爲 bind() 的第一個參數,而其他參數將做爲新函數的參數,供調用時使用。
經過bind可解決兩個問題:1)以隱蔽和優雅的方式解決依賴注入的問題,能夠將函數執行須要的上下文環境對象經過bind方法傳遞給函數,在函數內部直接使用this來引用。2)解決多層調用時this對象沒法傳遞給內部函數的問題,實際是第一個問題的延展。
看代碼樣例:ide

var obj = {
    a: function(){
        //'this' is 'obj',是真正的this
        console.log(this);

        var func = function(){
            //'this' is 'window', 容易混淆的地方,上層對象沒法經過this引用了,這裏的this是window對象了。
            console.log(this);
            //因此下面這句話出錯,沒法找到屬性
            console.log(this.c);
        };
        func();
    },

    b : function(){
        var func = function(){
            //'this' is 'obj',是經過bind傳入的。
            console.log(this);
            console.log(this.c);
        }.bind(this);
        func();
    },

    c : 'Hello!'
}

obj.a();
obj.b();

在實際開發工做中,若是須要在函數內部應用外部對象,能夠經過bind傳入;若是須要在嵌套函數或回調函數內部應用上級對象,也能夠經過bind傳入。函數

相關文章
相關標籤/搜索