我有这段代码,并抛出以下错误:
this.modifyAspect('health');
^
TypeError: Object #<Timer> has no method 'modifyAspect'
at Timer.tick (/Users/martinluz/Documents/Nodes/societ/node_modules/societal/societal.js:93:9)
at Timer.exports.setInterval.timer.ontimeout (timers.js:234:14)
我尝试将
modifyAspects()
分别称为Societ.modifyAspects
,this.modifyAspects()
和modifyAspects()
,但只有错误。任何帮助或建议,表示赞赏...这是代码:
var Societ = function(inboundConfig){
this.population = undefined;
this.owner_id = undefined;
this.owner_name = undefined;
this.config = inboundConfig;
this.aspects = {
education:{
facilities: undefined,
rating: undefined
},
health: {
facilities: undefined,
rating: undefined
}
};
this.modifiers = {
health: 1,
education: 2,
population: 2
};
this.tickio = function(){
console.log('tickio');
}
return{
config: this.config,
bootstrap: function(){
this.owner_id = this.config.owner_id;
setInterval(this.tick, 10000); /*** Problematic line ***/
},
yield: function(){
console.log(this.population);
},
getOwnerId: function(){
return this.owner_id;
},
modifyAspect: function(aspect){
console.log('Modifying aspect: '+aspect);
},
tick: function(){
console.log('Ticking!');
this.modifyAspect('health');
console.log('Recalculate education');
console.log('Recalculate population');
},
}
}
最佳答案
您需要将传递给setInterval
的函数绑定到正确的上下文:
setInterval(this.tick.bind(this), 10000);
这将定义
this
中的this.tick
实际指向的内容,如果不绑定,它将在计时器的上下文中运行(处理setInterval
),如您在错误中所注意到的。