[英]Javascript calling object function from array
主要:
var array = [];
array.push(new npc(mapname, maps));
array.push(new npc(mapname, maps));
console.log("first id: " + array[0].getID());
console.log("second id: " + array[1].getID());
Npc.js:
var id;
function npc(mapname, maps) {
id = maps[mapname].npcs.length + 1;
console.log("ID set to: " + id);
maps[mapname].npcs.push(this);
}
Npc.prototype.getID = function() {
return id;
};
输出:
ID set to: 1
ID set to: 2
first id: 2
second id: 2
我无法理解为什么输出是2,2而不是1,2。 不管我以哪种方式进行设置,我都会得到相同的结果。
这是与同一类的两个实例只能访问一次出现的var id
有关,还是我必须将一个副本推入数组?
无论哪种方式,我都不知道为什么会发生或如何解决此问题。
您已将id
声明为全局变量,而不是实例变量。 第二次调用new npc
您将覆盖全局id
变量,这就是为什么array[1].getID()
返回错误值的原因。
id = maps[mapname].npcs.length + 1
应该真的是
this.id = maps[mapname].npcs.length + 1
和
Npc.prototype.getID = function() {
return id;
};
应该真的是
Npc.prototype.getID = function() {
return this.id;
};
这是因为您在此处设置ID:
id = maps[mapname].npcs.length + 1;
并且您将其定义为全局变量(在语句的顶部),因此最终您会说,好吧,ID = 1,然后设置ID = 2 ...然后您问什么是ID? 最近设置为2,因此两个响应均为2。
如果您在两次推送之间进行了console.log,它将起作用...
您需要使id成为对象的属性而不是全局变量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.