2

刚刚在我的 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


但是,根据这张表,如果我使用bind(). 我一直在阅读apply()call()但它们似乎适用于有争议的情况。bind()在这种情况下,如何使用 pre-ECMAScript5 方法实现我需要的行为?

4

1 回答 1

2

John Resig 没有给出我自己的答案,而是告诉你如何在这里。(点击1)我们的目标,然后点击下一步)。

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

于 2012-07-13T03:37:20.857 回答