gpt4 book ai didi

javascript - 当用作其他对象的事件处理程序时访问方法中的成员?

转载 作者:行者123 更新时间:2023-11-29 10:43:24 25 4
gpt4 key购买 nike

我有一个 JavaScript“类”(如果你想这样调用它):

function MyClass()
{
this.something = "hello";

this.myHandler = function(e) { console.log(this.something); };
}
var taco = new MyClass();

然后我有一个类似这样的事件处理程序设置:

$('div').on('click', taco.myHandler);

因此,每当我的 div 被点击时,事件处理程序就会触发。但是,this.something 出现为 undefined,我猜是因为 this 指向 $('div' ) 而不是指向类。

当一个类的方法被用作另一个对象的事件处理程序时,我如何访问该类的私有(private)成员和公共(public)成员?

最佳答案

您可以像这样将函数对象与实际对象绑定(bind)

$('div').on('click', taco.myHandler.bind(taco));

实际的问题是,当您说 taco.myHandler 时,您只会得到函数对象。而 this 只有在实际调用时才会被赋值。因此,当用户点击 div 时,它将调用传递给它的函数对象。由于找不到与之关联的对象,默认情况下,JavaScript 会将 this 设置为全局 window 对象,其中 something 未定义。这就是为什么您得到 undefined 的原因。

当您将函数对象与实际对象绑定(bind)时,它将创建一个新函数,其中 this 绑定(bind)保持不变。

关于javascript - 当用作其他对象的事件处理程序时访问方法中的成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24566857/

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