Значение ключевого слова этого функции определяется тем, как вызывается функция.Когда метод drawImg вызывается для экземпляра пользовательского интерфейса, например:
var fooUI = new UI(...);
fooUI.drawImg(...);
, то в методе fooUI.drawImg , this ключевое слово будет ссылаться на fooUI .
Внутри метода есть присваивание свойству onload :
this.imgcache[path].onload = function() {
this.canvas.drawImage(this.imgcache[path], coords[0], coords[1],
this.imgcache[path].width, this.imgcache[path].height);
};
Первый это будет ссылаться на fooUI .Однако анонимная функция, назначенная свойству onload , вызывается как метод объекта, на который ссылается this.imagecache [путь] , так что это объект, на который ссылается функция this при вызове.
Вы можете изменить это, используя замыкание на локальную переменную с разумным именем (, что, на мой взгляд, не является хорошим выбором), например:
var uiObj = this;
this.imgcache[path].onload = function() {
uiObj.canvas.drawImage(uiObj.imgcache[path], coords[0], coords[1],
uiObj.imgcache[path].width, uiObj.imgcache[path].height);
};