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傳入。函數