Javascript对象:这两个值如何不同?

时间:2013-12-01 10:04:00

标签: javascript oop

我对OOP很新,而且我无法辨别为什么我为两个控制台日志获取不同的值。第一个日志给我正确的高度值,第二个通过对象属性访问值告诉我高度为0.我还可以说,如果我在imageLoader.images[this.sprite]上运行控制台日志,并在{ {1}}当player1.height(基本上我从每个值中删除了.height属性)时,第一个日志正确地命名精灵,即使它已被动态更改,而第二个日志再次不正确且只有名称在创建时分配对象的sprite(来自imageName参数)。

作为一些背景知识,构造函数从对象 imageLoader 中的对象 images 中提取图像,每个实际图像都包含在以图像的名称。我希望通过每个新东西的高度属性访问每个图像的高度。

this.height = imageLoader.images[this.sprite]

希望有点清楚。谢谢你看看。

1 个答案:

答案 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());