JavaScript递归设置超时
我用JavaScript定义了这个类:JavaScript递归设置超时,javascript,settimeout,javascript-objects,Javascript,Settimeout,Javascript Objects,我用JavaScript定义了这个类: function Signal(lbl, ho, tag) { this.lbl = lbl; this.ho = ho; this.tag = tag; this.getstatus = function () { if (this.ho) { $.get('/get.cgi?' + this.tag + '=?0', function (data) {
function Signal(lbl, ho, tag) {
this.lbl = lbl;
this.ho = ho;
this.tag = tag;
this.getstatus = function () {
if (this.ho) {
$.get('/get.cgi?' + this.tag + '=?0', function (data) {
console.log(data);
setTimeout(this.getstatus, 1000);
});
}
};
}
一旦调用了getstatus,它应该开始使用setTimout调用自己,但是它没有!它只工作一次
如果我使用一个没有类的函数,它就可以工作
请帮帮我
谢谢 问题是当计时器调用
getStatus
时,this
在方法中不引用对象,您可以使用bind()
为this
传递自定义值。还要注意,在ajax回调中,此引用ajax设置对象
function Signal(lbl, ho, tag) {
this.lbl = lbl;
this.ho = ho;
this.tag = tag;
this.getstatus = function () {
if (this.ho) {
var signal = this;
$.get('/get.cgi?' + this.tag + '=?0', function (data) {
console.log(data);
setTimeout(signal.getstatus.bind(signal), 1000);
});
}
};
}
this
的错误用法请尝试在打开if之后放置类似于var self=this
的内容,然后调用self.getstatus
,这是一个迂腐的注释,Javascript没有类。。。拥抱原型的自由!我喜欢使用比“self”(或“that”)更具表现力的名称,在这种情况下,signal似乎更合适,因此var signal=this
和signal.getstatus.bind(signal)
很清楚这是什么界限。还可以使用setTimeout(function(){signal.getstatus()},1000)
@RobG:signal
设置正确的thisArgself
是否(按惯例)表示当前实例。通常代码不够模糊,以至于不清楚(多个实例中的)是哪一个。@Bergi类似地,self可以是任何东西,使用信号(或任何这是实例的东西)只是暗示它是什么。self可能适合于在此时使用不同的对象“类”调用的方法。。。。