Я только начал использовать 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 () выдает ошибку о том, что метод рисования не определен.
Я не мог найти для этого настоящего решения.
в конце концов я нашел это Как вызвать метод внутри объекта javascript
где ответ, похоже, заключается в том, что мне нужно сохранить эту ссылку, например:
var _this = this;
но я не мог заставить это работать в буквальной нотации, поэтому я изменил код на конструктор объекта (думаю, так он называется) и добавил переменную.
Затем я изменил
this.draw();
на
_this.draw();
, и это сработало .
хотя
this.clear();
и this.update () остались прежними, казалось, что они никогда не выдают ошибок.
Кто-нибудь может объяснить, почему это так? и, может быть, укажете мне лучшее решение? заранее спасибо.
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);
}
}