【发布时间】:2015-07-14 22:30:12
【问题描述】:
我想将某些对象的 Javascript 代码封装在如下所示的结构中。但是,我遇到了this 的语义问题。
虽然在tiles.init() 期间this 指的是tiles 对象,但在事件处理程序中它指的是事件,即我不能使用this 从我的对象中调用其他方法。
有没有办法将对象传递给事件处理程序,这样我就不必使用全局变量来调用我自己的子例程并且仍然保留来自回调的this上下文?
我发了一个JSFiddle here。这是工作的 JS 部分:
myData = {
'color': "red",
'makeRed': function(){
// don't want reference to global here!
$(this).css("color",myData.color);
},
'reset': function(){
$(this).css("color","");
},
'init': function(){
$("#click").hover(this.makeRed,this.reset);
}
};
myData.init();
我找到了几个解决方案,例如 this 和 this 想法来传递额外的参数。该问题已被标记为与this 重复,但使用.bind() 会浪费回调中jQuery 所需的this。
知道如何在不使用全局变量的情况下将事件上下文的tiles 和this 都获取到处理函数吗?
【问题讨论】:
-
.hover(this.hoverIn.bind(this), this.hoverOut.bind(this)) -
我实际上错过了那个答案,但它并没有解决全部问题。它导致了 elclanrs 提出的建议。这会带来这样的图块,但会丢弃事件,即 jQuery $(this) 不再起作用。
标签: javascript jquery this argument-passing