var o = {
f : function() {
this.p();
}
p : function() {
alert("run!");
}
}
element.addEventListener("click", o.f);
//addEventListener is overrode for older IE version.
在此代码中,element
具有处理对象o
的方法o.f()
的点击事件。
如果我像这样直接运行那个方法
o.f();
它工作正常。它会显示警告消息框,其中包含文本“run!”。
但是在IE8中,当触发click事件时,它会显示错误。 “this
没有方法p。”(undefined
)
因为在其他浏览器和最新的IE版本中,this
本身包含对象o
。但旧的IE包含Window Object
。
我想解决这个问题。使this
指向对象本身。不是window
。
有可能吗?
答案 0 :(得分:3)
对于IE8(或实际上任何浏览器),您需要更改它:
element.addEventListener("click", o.f);
到此:
element.addEventListener("click", function(e) {
return o.f(e);
});
当您传递o.f
时,您只传递对f
函数的引用。对象o
的引用丢失了。因此,最终只需调用f
,而无需根据需要设置this
。在较新的浏览器中,您可以这样做:
element.addEventListener("click", o.f.bind(o));
但是,.bind()
在IE8中不可用,所以我的第一个推荐是更多跨浏览器。仅供参考,这一切都假设您在IE8中进行.addEventListener
工作(根据您的意见)。