Con = function() {
this.op = 1;
this.count = 0;
}
Con.prototype.loop = function() {
this.doNext = setInterval(this.next, 100);
}
Con.prototype.next = function() {
this.count++;
if (this.count > 10) clearInterval(this.doNext);
}
obj = new Con();
when I call obj.loop(); 'this' in obj.next refers to setInterval
and not obj . I realise I can add var ref = this; and send it with
setInterval but is there something I can do to get 'this' to refer to
obj when in obj.next ?
Andrew Poulos
AFAIK, the contents of the "this" keyword cannot be altered, and
closures are a normal way of handing the problem:-
Con.prototype.loop = function() {
var ref=this;
this.doNext = setInterval(function(){ref.next();}, 100);
}
Regards
Julian
Besides closures you can also overload your function. I'm not saying
it's anyhow better than closures, just another way:
function Con() {
this.counter = 0;
this.timerID = null;
this.moveNext = function() {
with (arguments.callee.context) {
counter++;
if (counter > 10) {
clearInterval(timerID);
alert('Show is over');
}
}
}
this.startLoop = function() {
this.moveNext.context = this;
this.timerID = self.setInterval(this.moveNext, 100);
}
}
obj = new Con();
obj.startLoop();
Maybe someelse would post another comments ;-)