Javascript类中的命名空间

时间:2012-12-03 09:01:14

标签: javascript

我正在尝试在Javascript中创建一个计时器,我对如何实现它有一个特定的问题。

现在就像这样

function CountUpTimer(seconds,name,targetId,submitButtonId){
this.time = seconds; 
this.currentTime = 0;
this.minutes = Math.floor(seconds/60);
this.submitButtonId = submitButtonId;

this.seconds = seconds - this.minutes*60;
this.currentSeconds = 0;
this.currentMinutes = 0; 
this.targetId = targetId;
this.name = name;
this.isPaused = false; 
this.init = function(){
    setInterval(this.name + ".tick()",1000);
}

this.pause = function(){
    this.isPaused = true;
}
this.unpause = function(){
    this.isPaused = false; 
}
this.tick = function(){
    if(this.isPaused == false){
    if(this.currentTime <= this.time){
        if(this.currentSeconds == 59){
            this.currentSeconds = 0;
            this.currentMinutes++; 
        }
        this.updateTimer();
        this.currentTime++;
        this.currentSeconds++;
    } else{
        this.endTiming();
    }
}
}

现在,问题在于我无法动态创建CountUpTimer对象,因为我需要知道我分配给该对象的变量的名称。有什么方法可以解决这个问题 - 所以让我们说像

setInterval(this.tick(),1000);

3 个答案:

答案 0 :(得分:2)

使用回调时,执行时会丢失上下文。 您应该使用bind来保留上下文。

setInterval(this.tick.bind(this),1000);

更多详情here

答案 1 :(得分:1)

this.init = function(){
   var self = this;
   setInterval(self.tick(),1000);
}

保持对原始对象的引用,因为在setInterval中使用它将在错误的对象上下文(文档)中。

答案 2 :(得分:0)

你可以这样做:

var self = this;
setInterval(function() {
    self.tick()
}, 1000);

如果您对非传统支持感到满意,请使用Function.bind