我是一个刚刚学习 JavaScript 的 C++ 人,所以“this”绑定(bind)到调用对象这一事实仍然令人惊讶。我想使用对象方法作为事件监听器,并希望确保我以你们 JavaScript 专业人员的所有风格来做这件事。
因此,为了让方法拥有它的对象“this”,以便我可以在适当的上下文中访问它的属性,我编写了以下内容:
var user =
{
status: 1, // login status: 0:invalid password, 1:logged out, 2:logged in
loginName: "",
// Method called whenever the user submits a username/password via html form:
onLoginSubmit: function (event)
{
if (this != user) // called from 'form submit' callback, so call ourselves:
{
user.onLoginSubmit(event);
return;
}
}
};
我在这里找到了以前的答案:Accessing an object's property from an event listener call in Javascript , 但建议的解决方案是基本上创建一个全局的。 有没有比以前的解决方案或我的递归解决方案更酷、更专业的方法来获得“这个”?
最佳答案
我假设当您绑定(bind)提交处理程序时,您正在做这样的事情:
form.submit(user.onLoginSubmit);
虽然你所拥有的确实有效,但最好的方法是绑定(bind)提交处理程序,以便它实际调用 onLoginSubmit 使用适当的“this”,这样你就不需要提交处理程序中的任何额外逻辑.
如果您在绑定(bind)函数时执行类似的操作,那么它应该可以工作。
form.submit(function(e) {
user.onLoginSubmit(e);
});
通过使用匿名函数,仍然可以正常调用用户对象的方法。
如果我误解了您的问题,请发布更多有关如何调用 onLoginSubmit() 的代码。
关于javascript - 使用对象方法作为事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7264656/