Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript对象:这两个值有何不同?_Javascript_Oop - Fatal编程技术网

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

Javascript对象:这两个值有何不同?,javascript,oop,Javascript,Oop,我对OOP非常陌生,我很难辨别为什么两个控制台日志的值不同。第一个日志为我提供了正确的高度值,第二个通过对象属性访问该值的日志告诉我高度为0。我还可以说,如果我在imageLoader.images[this.sprite]上运行控制台日志,当this.height=imageLoader.images[this.sprite]时,在player1.height上运行控制台日志(因此基本上我从每个值中删除了.height属性),第一个日志会正确地命名精灵,即使它已被动态更改,而第二个日志再次不正

我对OOP非常陌生,我很难辨别为什么两个控制台日志的值不同。第一个日志为我提供了正确的高度值,第二个通过对象属性访问该值的日志告诉我高度为0。我还可以说,如果我在
imageLoader.images[this.sprite]
上运行控制台日志,当
this.height=imageLoader.images[this.sprite]
时,在
player1.height
上运行控制台日志(因此基本上我从每个值中删除了.height属性),第一个日志会正确地命名精灵,即使它已被动态更改,而第二个日志再次不正确,仅命名创建时分配给对象的精灵(来自imageName参数)

作为一点背景,构造函数从对象imageLoader内的对象图像中提取图像,每个实际图像包含在以图像名称命名的属性中。我想通过每个新事物的高度属性访问每个图像的高度

function Thing(imageName) {
    this.sprite = imageName;
    this.height = imageLoader.images[this.sprite].height;
}

var player1 = new Thing ("face_right");

console.log(imageLoader.images[player1.sprite].height);
console.log(player1.height);

希望这有点清楚。感谢您查看。

您没有显示任何会导致精灵更改的代码,但您似乎在说您希望
播放器1.height
自动更新以反映当前精灵的高度,精灵可以动态更改?如果是这样的话,它将不会像您当前拥有的那样工作,因为您设置的
this.height
属性将只是一个原始数字值-它不是对其他对象属性的引用。当精灵更新时,您需要添加代码来更改实例的
.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());

对,实例和日志之间一定有什么关系。请描述一下。