javascript - 使用对象方法作为事件监听器

标签 javascript events addeventlistener

我是一个刚刚学习 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/

相关文章:

javascript - SAPUI5 表将操作绑定(bind)到图标模板

javascript - 如何在不使用 onclick 的情况下处理 ng-repeat 中的事件

android - Facebook 登录 EventListener 不适用于 Facebook 登录按钮

javascript - 如何在 Canvas 上捕获按键事件而不干扰网站的其余部分?

javascript - 我应该为整个 SPA 使用单个模型对象还是为每个组件使用许多小模型?

javascript - 在具有 Opera Mini 的功能手机上,选择要上传的文件是否可以在没有 JavaScript 的情况下触发 UI 更改?

c# - 使用事件 'source' 的嵌套对象指针是否正确?

wpf - 引发 WPF MouseLeftButtonDownEvent 事件

javascript - 使用从 JSON 派生的 Knockout 可观察量来动态更新 View

javascript - 在不改变原始数组的情况下过滤 javascript 树