0

我有这个代码:

var doors = [];

for(var i = 0; i < 100; i++){
    var door = new Door();
    door.setDoorNumber(i);
    doors.push(door);
};

门的实现是这样的:

Door = function(){

var doorNumber;

Door.prototype.getDoorNumber = function(){
    return doorNumber; 
};
Door.prototype.setDoorNumber = function(number){
    doorNumber = number;
};

输出是这样的:

door[0].getDoorNumber(); // 99
door[1].getDoorNumber(); // 99
door[2].getDoorNumber(); // 99
door[3].getDoorNumber(); // 99

我希望输出是这样的:

door[0].getDoorNumber(); // 0
door[1].getDoorNumber(); // 1
door[2].getDoorNumber(); // 2
door[3].getDoorNumber(); // 3

这是怎么回事?我假设这是因为在 jsi中是通过引用传递的。获得所需输出的最佳方法是什么?

谢谢!

4

1 回答 1

4

目前,您只是创建一个新变量并将 0 到 99 分配给该变量。它不是Door对象的属性。

只需对其进行限定this以使其工作。

Door = function(){
    this.doorNumber;
}

Door.prototype.getDoorNumber = function(){
    return this.doorNumber; 
};
Door.prototype.setDoorNumber = function(number){
    this.doorNumber = number;
};
于 2013-08-17T05:01:08.047 回答