我在学习面向对象的 Javascript 时遇到了一些麻烦。我有两个名为Cosmos
and的类Background
,Cosmos
如下所示:
// js/Cosmos.js
function Cosmos() {
this.background = new Background();
// Fire game loop
this.ticker = setInterval(this.tick, 1000 / 60);
}
// Main game loop
Cosmos.prototype.tick = function() {
console.log(this.background);
}
当主游戏循环滴答作响时,我进入undefined
控制台。我不太明白这是因为this.background
它是Cosmos
类的属性,所以它应该可以通过Cosmos
类中定义的方法访问,不是吗?
如果我回到index.html
页面的脚本标签并将其更改为:
// Lift off
var cosmos = new Cosmos();
console.log(cosmos.background);
它工作并且Background
对象被记录到控制台。谁能提供解释并告诉我如何Cosmos
从内部访问属性Cosmos.tick
?
编辑:原来问题与setInterval()
,因为如果我这样做,正确的对象被记录到控制台:
function Cosmos() {
this.background = new Background();
// Fire game loop
//this.ticker = setInterval(this.tick, 1000 / 60);
this.tick();
}
// Main game loop
Cosmos.prototype.tick = function() {
console.log(this.background);
}
不过,仍然不知道最好的解决方法。