我对OOP很新,而且我无法辨别为什么我为两个控制台日志获取不同的值。第一个日志给我正确的高度值,第二个通过对象属性访问值告诉我高度为0.我还可以说,如果我在imageLoader.images[this.sprite]
上运行控制台日志,并在{ {1}}当player1.height
(基本上我从每个值中删除了.height属性)时,第一个日志正确地命名精灵,即使它已被动态更改,而第二个日志再次不正确且只有名称在创建时分配对象的sprite(来自imageName参数)。
作为一些背景知识,构造函数从对象 imageLoader 中的对象 images 中提取图像,每个实际图像都包含在以图像的名称。我希望通过每个新东西的高度属性访问每个图像的高度。
this.height = imageLoader.images[this.sprite]
希望有点清楚。谢谢你看看。
答案 0 :(得分:2)
你没有显示任何会导致精灵改变的代码,但你似乎在说你希望player1.height
自动更新以反映当前精灵的高度,精灵可以在哪里动态变化?如果是这样,它将无法按照您当前的方式工作,因为您设置的this.height
属性只是一个原始数字值 - 它不是对另一个对象属性的引用。更新精灵时,您需要添加代码来更改Thing
实例的.height
属性。
或者不是让.height
属性使用.height()
方法 - 或者可能将其称为.getHeight()
,如下所示:
function Thing(imageName) {
this.sprite = imageName;
this.getHeight = function() {
return imageLoader.images[this.sprite].height;
}
}
var player1 = new Thing ("face_right");
console.log(player1.getHeight());