首页 >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