我需要将对当前对象的引用传递给匿名函数。在Mootools中它会是这样的:
this.start = function(){
this.intervalId = setInterval(function(){
this.elapsedTime ++;
this.setTime();
}.bind(this), 1000);
}
但是我需要使用jQuery来完成它,并且jQuery不支持这样的语法。我能做什么?我试过了:
this.start = function(){
var thisObj = this;
this.intervalId = setInterval(function(){
thisObj.elapsedTime ++;
thisObj.setTime();
}, 1000);
}
但看起来thisObj只是一个新对象,因为它在init方法中赋值的一些方法现在是空的。
请告知:)
答案 0 :(得分:4)
您的代码应该有效,thisObj
不引用新对象。它引用了this
。如果此代码无效,则表示您未正确调用start()
,甚至bind()
也无法帮助您。
因此,您必须先修复代码,确保以正确的方式调用start()
,例如myobj.start()
。
但无论如何,jQuery提供了$.proxy
方法:
this.intervalId = setInterval($.proxy(function(){
this.elapsedTime ++;
this.setTime();
}, this), 1000);
与.bind()
相同。
答案 1 :(得分:1)
将 thisObj
更改为全局,因此它存在于start
函数之外。 {h} setInterval
函数调用的方式不知道thisObj
是什么
var thisObj = null;
this.start = function(){
thisObj = this;
this.intervalId = setInterval(function(){
thisObj.elapsedTime ++;
thisObj.setTime();
}, 1000);
}
工作示例:http://jsfiddle.net/hunter/Swh9U/
击>
为证明费利克斯的观点,OP的代码确实有用:http://jsfiddle.net/hunter/Swh9U/1/