繁体   English   中英

Javascript从数组调用对象函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM