使用Javascript从setInterval引用函数

时间:2015-05-22 13:05:51

标签: javascript

当我尝试运行add函数时,它会给出TypeError: this.add is not a function

function Timer(){
    this.t; 
    this.count = 0;

    this.start = function(){
        this.t = setInterval(function () {this.add()}, 1000);
    }
    this.add = function(){
        this.count++;
        console.log(this.count);
    }
}

function startTimer(){
    timer = new Timer();
    timer.start();
}

如何在该实例中访问this.add函数?

2 个答案:

答案 0 :(得分:3)

解决方案是创建一个变量来保存this,但更简单的是使用bind

this.t = setInterval(this.add.bind(this), 1000);

答案 1 :(得分:1)

这是因为匿名函数中的this获取了错误的上下文。您需要bind该函数符合原始上下文:

this.t = setInterval(function () {this.add()}.bind(this), 1000);

或者在某个变量中继续引用你的上下文:

function Timer(){
    this.t; 
    this.count = 0;

    this.start = function(){
        var self = this;
        this.t = setInterval(function () {self.add()}, 1000);
    } 
...