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 被同一 class 的两个实例访问,或者我是否必须将副本推送到数组?

无论哪种方式,我都不知道为什么会这样,也不知道如何解决这个问题。

您已将 id 声明为全局变量而不是实例变量。第二次调用 new npc 时覆盖了全局 id 变量,这就是 array[1].getID() returns 错误值的原因。

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 作为对象的 属性 而不是全局变量。