"Uncaught TypeError: undefined is not a function" when calling function withing object
"Uncaught TypeError: undefined is not a function" when calling function withing object
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()" 的错误。我在这里看不到问题,我可以从初始化函数成功调用 this.update(),但是当我调用 this.render() 时它说它是未定义的
调用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();
},
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()" 的错误。我在这里看不到问题,我可以从初始化函数成功调用 this.update(),但是当我调用 this.render() 时它说它是未定义的
调用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();
},