Я только начал использовать oop в javascript, и я столкнулся с некоторыми проблемами, пытаясь получить метод из другого метода.
вот код, который у меня был:
var Game = {
initialize: function () {
if (canvas.isSupported()) {
sprites[0] = new Player();
this.update();
}
},
update: function() {
for (var i = 0; i < sprites.length; i++) {
sprites[i].update();
}
this.draw();
},
draw: function() {
this.clear();
for (var i = 0; i < sprites.length; i++) {
sprites[i].draw();
}
setTimeout(this.update, 10);
},
clear: function() {
canvas.context.clearRect(0, 0, canvas.element.width, canvas.element.height);
}
}
но вызов Game.update() дает ошибку, что метод draw не определен.
Я не мог найти для этого реального решения.
в конце концов я нашел это Как вызвать метод внутри объекта javascript
где ответ, кажется, заключается в том, что мне нужно сохранить эту ссылку, например:
var _this = this;
но я не мог заставить это работать в буквальной нотации, поэтому я изменил код на конструктор объектов (я думаю, что он вызвал) и добавил переменную.
Затем я изменил
this.draw();
к
_this.draw();
и он работал.
хотя
this.clear();
и this.update() все те же, они никогда, казалось, не давали ошибок в первую очередь.
Может кто-нибудь объяснить, почему это? и, возможно, указать мне на лучшее решение? спасибо заранее.
Обновление
Вот что это должно быть:
var Game = function () {
var _this = this;
this.initialize = function () {
if (canvas.isSupported()) {
sprites[0] = new Player();
this.update();
}
}
this.update = function () {
for (var i = 0; i < sprites.length; i++) {
sprites[i].update();
}
this.draw();
}
this.draw = function () {
this.clear();
for (var i = 0; i < sprites.length; i++) {
sprites[i].draw();
}
setTimeout(function () { _this.update(); }, 10);
}
this.clear = function () {
canvas.context.clearRect(0, 0, canvas.element.width, canvas.element.height);
}
}