我有一个关于在一个对象中维护this
的范围的一般性问题。这里有一个简单的代码片段。请注意0一行,并在事件处理程序中呼叫that.showMenu()
。维护范围
var MyObj = {
init : function(target){
this.$Target = $(target);
this.$Menu = $(target).find('.menu');
this.eventBindings();
},
eventBindings : function(){
var that = this;
this.$Target.on('click', '.anchor', function(e){
e.preventDefault();
that.showMenu();
//some other code
});
},
showMenu : function(){
this.$Menu.show();
}
};
MyObj.init('.myTarget')
代码应该有点自我解释。通常我会尝试在我的eventBindings()
之外创建可重用的方法。我不断遇到的问题是通过this
,这将参考MyObj
到事件处理程序,所以我可以拨打this.showMenu()
。
为了克服障碍,我总是将this
分配给一个名为that
的变量,所以当我进一步缩小范围时,我有一个参考。但我觉得这不可能是最好的方法...有人可以提出更好的选择吗?
对我来说看起来很好,但'那是一个可怕的名字。考虑一些更具描述性的内容,比如'outerScope'。 – 2013-04-11 21:27:23
另请参阅函数原型上的[.bind()'方法](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind)。 – Pointy 2013-04-11 21:28:03
@RobertHarvey尽管如此,多年来这种'这个'是如何被普遍使用的,这不是很有趣吗? ;) – summea 2013-04-11 21:53:50