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

Joh*_*son 4 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 
      }

   };
}
Run Code Online (Sandbox Code Playgroud)

在javascript中,通常创建一个名为"that"或"self"的变量或者在创建时存储"this"的值的某些东西,以便在将来的调用中可以使用它来指向对象拥有自己因为"这"可能指向别的东西.如果例如methodA被用作点击处理程序,这将非常有用.

如何在返回的对象文字中创建"that"变量?

有没有一种很好的方法来初始化一个对象文字中的"那个"变量,或者是否需要更加圆润的东西?

更新

是的,我想要引用的对象是对象文字本身.

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

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

Fel*_*ing 6

如果要将函数"绑定"到对象,则需要在函数内部引用对象,这意味着必须将其分配给变量:

var obj = {
    methodA: function() {
      // use obj here
    }
};
return obj;
Run Code Online (Sandbox Code Playgroud)

但是,只有在methodA实际引用对象中的任何其他属性时才需要这样做.

如果您只访问评论中提到的内容,则无需进行此操作.无论功能如何被调用,你永远有机会获得someMethod,somevars并且inputs,因为他们是词法范围的.

  • 我不确定为什么这会被贬低.它比这里给出的任何其他答案更正确,它们将函数绑定到与函数返回的不同对象. (4认同)