Javascript bind() 方法
而call() 和apply() 用於透過手動傳遞來呼叫具有特定上下文的函數或以陣列形式提供參數,bind() 方法有不同的用途。
何時使用bind()
當您需要建立具有預定義上下文的新函數以供以後呼叫時,應使用 bind() 方法。這在事件處理和非同步回調中特別有用。
與 call() 和 apply() 的比較
與立即執行的 call() 和 apply() 不同函數,bind() 傳回一個新函數。這個新函數在執行時會將原始函數的上下文設定為綁定物件。
考慮以下範例:
var obj = { x: 81, getX: function() { return this.x; } }; // Bind the function to the object 'obj' var boundGetX = obj.getX.bind(obj); // Later, invoke the bound function with the desired context alert(boundGetX());
在這種情況下,boundGetX 函數會維護obj 物件的上下文,即使是非同步呼叫或在回調中呼叫也是如此。
事件中的使用處理
處理事件時,通常希望維護特定物件的上下文。使用bind(),可以確保事件處理程序在執行時有正確的上下文。
function MyObject(element) { this.elm = element; element.addEventListener('click', this.onClick.bind(this), false); }; MyObject.prototype.onClick = function(e) { // 'this' refers to the MyObject instance // Perform some action... };
透過將onClick函數綁定到MyObject實例,可以保證當點擊事件發生時,其中的this關鍵字事件處理程序將引用 MyObject 實例。
實作詳細資訊
簡化的實作bind() 可能看起來像這樣:
Function.prototype.bind = function(ctx) { var fn = this; return function() { fn.apply(ctx, arguments); }; };
以上是什麼時候應該使用JavaScript的bind()方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!