我是一个学习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)提交处理程序,以便它实际上使用适当的“this”调用onLoginSubmit,这样您就不需要在提交处理程序内部添加任何逻辑。
如果在绑定(bind)函数时执行了类似的操作,那么它应该可以工作。
form.submit(function(e) {
user.onLoginSubmit(e);
});
通过使用匿名函数,您仍然可以正确调用用户对象的方法。
如果我误解了您的问题,请发布一些有关您如何调用onLoginSubmit()的代码。