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