Jor*_*rte 0 javascript timer setinterval node.js
我有这个代码块,它给我发出以下错误:
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)
Run Code Online (Sandbox Code Playgroud)
我已经打过电话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');
},
}
}
Run Code Online (Sandbox Code Playgroud)
您需要将传递给的函数绑定setInterval到正确的上下文:
setInterval(this.tick.bind(this), 10000);
Run Code Online (Sandbox Code Playgroud)
这将定义哪些this在this.tick实际指向的,如果你不与它,它会在计时器(处理上下文中运行setInterval),因为你在错误通知.