我是一个学习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()的代码。

09-10 11:03
查看更多