【问题标题】:Javascript - bind() before ECMAScript 5 / how to simulate with apply() or call()?Javascript - ECMAScript 5 之前的 bind() / 如何使用 apply() 或 call() 进行模拟?
【发布时间】:2012-07-12 21:47:00
【问题描述】:

刚刚在我的 Javascript 世界的边缘遇到了一个绑定问题,所以我将按照 Regis 的建议进行讨论,然后提出我的问题:

function foo() {
    document.body.addEventListener("click", this.bar);
}

foo.prototype.bar = function(evt) {
    alert(this);
}

test = new foo();

这会使用 document.body 元素发出警报,因为 this 由于函数引用而丢失。因此,引用必须使用bind() 来持久化引用:

function foo() {
    document.body.addEventListener("click", this.bar.bind(this));
}

这会使用 foo 类型的预期对象发出警报。


但是,根据this table,如果我使用bind(),一堆浏览器将无法正常运行。我一直在阅读apply()call(),但它们似乎适用于有论据的情况。在这种情况下,如何使用 pre-ECMAScript5 方法实现我需要的 bind() 行为?

【问题讨论】:

标签: javascript binding this ecmascript-5


【解决方案1】:

John Resig tells you how here 没有给出我自己的答案。 (点击1)我们的目标,然后点击下一步)。

Resig 的解决方案来自prototype.js。您还可以看到 MDN 的描述 here 以及实现代码,近似于实际的 ES5 实现。不过,对于大多数用途来说,它应该已经足够好了。

【讨论】:

    猜你喜欢
    • 2012-05-02
    • 2013-10-09
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多