"未捕获的TypeError:undefined不是函数"当用对象调用函数时

时间:2015-02-08 18:36:42

标签: jquery javascript-objects

var spaceship = {
fps : 10,
speed : 1,
traveled : 0,
currency : 0,
initialize : function() {
    this.update();
},
update : function() {
    this.traveled += this.speed/this.fps;
    setTimeout(this.update, 1000/this.fps);
    this.render();
},
render : function() {
    $("#spaceshipbg").attr("background-position", "0px "+this.traveled+"px");
}
};

$(document).ready(function() {
spaceship.initialize();
});

所以这是我的代码,每当我加载页面时,我都会收到行“this.render()”的错误。我在这里看不到问题,我可以从initialize函数成功调用this.update(),但是当我调用this.render()时它说它是未定义的

1 个答案:

答案 0 :(得分:1)

调用initialize时,会调用this.update()update()本身有效,即使是第一次调用this.render()也是如此。但是,setTimeout会调用update,但不会在您的对象上调用它。因此,this将不再引用您的对象。 this.render()未定义。

有关该问题的详情,请read this

解决方案可能如下所示:

update : function() {
    var self = this;
    this.traveled += this.speed/this.fps;
    setTimeout(function() {
      // Enforce the correct context
      self.update();
    }, 1000/this.fps);
    this.render();
},