Кэшируйте переменную this
или используйте Function.bind
:
Game.prototype.run = function() {
var _this = this;
window.setInterval(function() {
var thisLoop = new Date().getTime();
_this.update();
_this.render();
lastLoop = thisLoop;
}, 1000 / this.fps);
};
Или используйте Function.bind
:
Game.prototype.run = function() {
window.setInterval((function() {
...
}.bind(this), 1000 / this.fps);
};
this
в функции, переданной в setInterval
, относится к глобальному объекту window
или undefined
(в строгом режиме).
Другой метод, аналогичный первому.Передайте this
в качестве параметра функции (чтобы не использовать дополнительную локальную переменную):
Game.prototype.run = function() {
window.setInterval(function(_this) {
var thisLoop = new Date().getTime();
_this.update();
_this.render();
lastLoop = thisLoop;
}, 1000 / this.fps, this);
};