首頁 >web前端 >js教程 >Javascript `call()` 和 `apply()` 與 `bind()`:什麼時候該使用哪一個?

Javascript `call()` 和 `apply()` 與 `bind()`:什麼時候該使用哪一個?

Linda Hamilton
Linda Hamilton原創
2024-12-02 00:07:16229瀏覽

Javascript `call()` & `apply()` vs. `bind()`: When Should You Use Which?

Javascript:call() & apply() 與bind() 重溫

雖然call() 和apply() 允許我們改變函數的上下文並手動或作為數組傳遞參數,bind()方法提供了獨特的

何時使用bind()

當您需要建立具有預定義上下文的函數以供以後執行時,Bind 特別有用。與立即呼叫函數的 call() 或 apply() 不同,bind 傳回具有指定上下文集的新函數。

以下範例示範了差異:

var obj = {
  x: 81,
  getX: function() {
    return this.x;
  }
};

alert(obj.getX.bind(obj)()); // 81
alert(obj.getX.call(obj)); // 81
alert(obj.getX.apply(obj)); // 81

在此例如,bind() 建立一個新函數,該函數在執行時始終將其上下文設為 obj 物件。這在事件監聽器中特別有價值,因為函數上下文可能會變得不明確。

用例

  • 事件監聽器:設定事件處理程序的上下文,以在非同步中維護正確的物件引用回調。
  • 非同步回呼: 在非同步 Node.js 回呼中保留原始函數的上下文。
  • 柯里化:建立一組新函數的固定參數,同時保留函數的原始值

範例:

function MyObject(element) {
  this.elm = element;

  element.addEventListener('click', this.onClick.bind(this), false);
}

MyObject.prototype.onClick = function(e) {
  var t = this; // do something with [t]...
  // Without bind, the context of this function would be different.
};

結論結論

結論結論結論結論結論結論結論結論結論結論結論結論結論結論結論 Bind允許您使用預定義上下文建立函數,這使得它在事件處理、非同步程式設計和其他維護上下文至關重要的場景中特別有用。 call() 和 apply() 提供即時函數調用,而 bind 則傳回一個函數,以便稍後在固定上下文中執行。

以上是Javascript `call()` 和 `apply()` 與 `bind()`:什麼時候該使用哪一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn