当我尝试运行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函数?
答案 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);
}
...