javascript - 如何确保返回的对象文字中的方法调用使用预期的 "this"

标签 javascript

我有一个 javascript 函数,它有许多方法和变量,并返回一个对象文字,我使用的有点像一个类,即

var myObject = function {

   var somevars;
   var someMethod = function(someInput) { };

   return {
      methodA:function(inputs) { 
        // calls someMethod, using somevars and inputs 
      },
      methodB:function(inputs) { 
        // calls someMethod, using somevars and inputs 
      }

   };
}

在 javascript 中,通常会创建一个名为“that”或“self”的变量,或者在创建时存储“this”值的类似东西,以便在以后的调用中可以使用它来指向自己的对象self 因为“this”可能指向别的东西。这很有用,例如methodA 用作点击处理程序。

如何在我返回的对象文字中创建一个“that”变量?

有没有什么好的方法可以在对象字面量中初始化“that”变量,或者是否需要更圆的东西?

更新

是的,我希望能够引用的对象是对象字面量本身。

是的,methodA 和 methodB 也可能相互调用并引用返回对象文字的其他成员。这就是我关心“这个”的原因。

我通过“新建”创建了该对象的多个实例。调用其中一个 X。然后我想使用 X.methodA 作为鼠标事件处理程序,例如我有 jquery 代码将 dom 元素上的 mouseup 附加到 X.methodA。但这看起来像 $("#domElementId").mousemove(X.methodA) 但是当调用 mousemove 时,methodA 中使用的“this”变量不再指向我所理解的 X。如果我错了,请随时纠正我。具体来说,在方法 A 中调用方法 B 将失败,因为它们确实是使用 this.methodB 完成的,并且“this”指向全局对象。

最佳答案

如果你想将函数“绑定(bind)”到对象,你需要在函数内部有一个对象的引用,这意味着你必须将它分配给一个变量:

var obj = {
    methodA: function() {
      // use obj here
    }
};
return obj;

但是,只有当 methodA 实际上引用了对象的任何其他属性时才需要这样做。

如果您只是访问评论中提到的内容,则没有必要这样做。无论函数如何调用,您始终可以访问 someMethodsomevarsinputs,因为它们是词法范围的。

关于javascript - 如何确保返回的对象文字中的方法调用使用预期的 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850660/

相关文章:

javascript - 将 Backbone 模型的 'this' 实例替换为获取的实例

javascript - Node 未从项目根加载模块

javascript - 多个 AJAX 调用请求 JSONP 的问题

javascript - 如何使用 JS 从选择下拉列表中进行选择

javascript - 在 react-leaflet/es/context.js 中调用 createContext 失败

javascript - 重画svg时如何避免闪烁?

javascript - 在 Ember.js 中实现 Accordion 式 View

javascript - 每个附件我都需要附上pdf或word或jpg图标

javascript - 为什么 Google Closure Compiler 重命名对象的属性名称?

javascript - 在javascript中添加删除按钮