ECMAScript 5之前的Javascript-bind()/如何使用apply()或call()进行模拟?
刚刚遇到了一个绑定问题,这个问题就在我的Javascript领域的边缘,所以我将按照Regis的建议,讨论一下我的方法,并得出我的问题:ECMAScript 5之前的Javascript-bind()/如何使用apply()或call()进行模拟?,javascript,binding,this,ecmascript-5,Javascript,Binding,This,Ecmascript 5,刚刚遇到了一个绑定问题,这个问题就在我的Javascript领域的边缘,所以我将按照Regis的建议,讨论一下我的方法,并得出我的问题: function foo() { document.body.addEventListener("click", this.bar); } foo.prototype.bar = function(evt) { alert(this); } test = new foo(); 这将使用document.body元素发出警报,因为此由于函数
function foo() {
document.body.addEventListener("click", this.bar);
}
foo.prototype.bar = function(evt) {
alert(this);
}
test = new foo();
这将使用document.body
元素发出警报,因为此
由于函数引用而丢失。因此,引用必须使用bind()
来持久化引用:
function foo() {
document.body.addEventListener("click", this.bar.bind(this));
}
这将使用类型为foo
的预期对象发出警报
但是,据我所知,如果我使用
bind()
,那么一堆浏览器将无法发挥作用。我一直在阅读apply()
和call()
但它们似乎适用于带有参数的情况。在这种情况下,如何使用ECMAScript5之前的方法实现所需的bind()
行为?John Resig,我没有给出自己的答案。(点击1)我们的目标,然后点击下一步)
Resig的解决方案来自prototype.js。您还可以看到MDN的描述和实现代码,近似于实际的ES5实现。不过,对于大多数目的来说,它应该已经足够好了。(单击“我们的目标”,然后点击“下一步”。你将在那里看到答案。)也可以看到。酷豆人-非常有用。很高兴接受这个解决方案。