Javascript - ECMAScript 5 之前的 bind()/如何使用 apply() 或 call() 进行模拟?

标签 javascript binding this ecmascript-5

刚刚遇到了一个绑定(bind)问题,这个问题就在我的 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() 但它们似乎适用于带有参数的情况。在这种情况下,如何使用 ECMAScript5 之前的方法实现我需要的 bind() 行为?

最佳答案

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

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

关于Javascript - ECMAScript 5 之前的 bind()/如何使用 apply() 或 call() 进行模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463767/

相关文章:

javascript - 如何使用 Promise.promisify 确保正确的 "this"?

javascript - 我只能为每个网页创建一个 CKEditor

javascript - 为什么 "this"会得到不同的值?

javascript - 我想创建一个包含脚本的 html 属性,但我无法管理 "this"进入我的脚本

javascript - 附加后如何删除不必要的html?

c - 了解库绑定(bind)

wpf - 问题数据绑定(bind)到 UserControl 上的 DependencyProperty

jquery - 使用 jQuery 突出显示事件元素

javascript - this.someFunction 不是函数

javascript - ....未捕获的类型错误 : Cannot read property '__e3_' of null