Я в некотором роде новичок в области действия JavaScript, поэтому это моя проблема:
"use strict";
function Explorer(xPos, yPos) {
// Inheritance
GraphicsEntity.call(this, {
x: xPos,
y: yPos,
width: 32,
height: 32
});
// Local fields
var _texture = new Image();
// Contruct
_texture.addEventListener("load", function() {
this.graphics.drawImage(_texture, 0, 0);
}, false);
_texture.src = "explorer.png";
}
Это вызовет исключение: Uncaught TypeError: Невозможно вызвать метод 'drawImage' из неопределенного
Я знаю, что это связано с тем, как JavaScript работает, поскольку «this» теперь относится к полю «_texture».Как вы можете видеть, Explorer (некоторый объект, похожий на плеер) наследуется от GraphicsObject, который, в свою очередь, имеет свойство graphics (контекст элемента canvas).
Я нашел способ исправить эту проблему, нона мой взгляд, это немного грязно:
"use strict";
function Explorer(xPos, yPos) {
// Inheritance
GraphicsEntity.call(this, {
x: xPos,
y: yPos,
width: 32,
height: 32
});
// Local fields
var _texture = new Image();
var _graphics = this.graphics;
// Contruct
_texture.addEventListener("load", function() {
_graphics.drawImage(_texture, 0, 0);
}, false);
_texture.src = "explorer.png";
}
Так что теперь все работает как положено, изображение аккуратно рисуется на элемент canvas.Единственная проблема заключается в том, что теперь у меня есть еще одна ссылка на «графику», которую я на самом деле не хочу.
Так что мой вопрос: есть ли способ заставить «this» ссылаться на объект Explorer или заставитьвозможности изменить?