gpt4 book ai didi

javascript - 在Javascript中,在IE8中,事件中附加的对象方法保持 'window object',而不是对象本身在 'this'

转载 作者:行者123 更新时间:2023-11-28 19:26:53 26 4
gpt4 key购买 nike

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。”(未定义)

因为在其他浏览器和最新的IE版本中,this包含对象o本身。但旧版 IE 包含 Window 对象

我想解决这个问题。使 this 指向对象本身。不是窗口

可能吗?

最佳答案

对于 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 中不可用,所以我的第一个建议是跨浏览器。仅供引用,这一切都假设您使 .addEventListener 在 IE8 中工作(根据您的评论)。

关于javascript - 在Javascript中,在IE8中,事件中附加的对象方法保持 'window object',而不是对象本身在 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27716220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com