首页 > web前端 > js教程 > Javascript 的 `bind()`、`call()` 和 `apply()`:我什么时候应该使用它们?

Javascript 的 `bind()`、`call()` 和 `apply()`:我什么时候应该使用它们?

DDD
发布: 2024-12-02 01:37:10
原创
128 人浏览过

Javascript's `bind()`, `call()`, and `apply()`: When Should I Use Each?

Javascript 的 bind() 与 call() 和 apply():何时分别使用?

当 call() 和 apply() 时两者都用于在特定上下文中调用函数(通过在函数中设置 this 关键字),它们的主要区别在于参数传递给函数的方式。 call() 期望参数以逗号分隔的列表形式传递,而 apply() 需要参数数组。

使用 bind() 方法

与call() 和 apply()、bind() 不会立即调用该函数。相反,它返回一个新的绑定函数,稍后调用该函数时,该函数将具有用于调用原始函数的正确上下文集。这在您想要在异步回调或事件中维护上下文的情况下特别有用。

例如,考虑以下代码:

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 wouldn't be a MyObject
    //instance as you would normally expect.
};
登录后复制

在 onClick 处理程序中, this 关键字将引用创建事件侦听器的 MyObject 实例,即使该事件是异步触发的。

何时使用 Call/Apply与 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
登录后复制

在所有三种情况下,输出为 81,因为所有函数都将调用 obj 上下文中的 getX 函数。然而,bind() 版本返回一个新函数,该函数在执行时将具有所需的上下文集。

以上是Javascript 的 `bind()`、`call()` 和 `apply()`:我什么时候应该使用它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板