我有以下示例构造函数:
function Loot(type, sellValue) {
this.type = type;
this.sellValue = sellValue;
}
我希望将这些值继承到其他对象中,然后将这些对象推送到数组中,例如:
var inventory = [];
var stone = new Loot("craft", 20);
inventory.push(stone);
var hat = new Loot("clothing", 80);
inventory.push(hat);
var coal = new Loot("ore", 5);
inventory.push(coal);
var diamond = new Loot("ore", 400);
inventory.push(diamond);
console.log(inventory);
但是,当我这样做时,我的广告资源会显示为(Loot, Loot, Loot, Loot)
而不是项目名称(stone, hat, coal, diamond)
。
我该如何解决这个问题?我想它需要某种形式的继承?
谢谢!
答案 0 :(得分:2)
像石头这样的变量名称对对象没有任何意义。它们是对象的引用,但不是对象的数据。
因此,stone只是创建的同一个新Loot的变量名。
您的示例中只有一个Loot对象。
另外,如果你使用调试器查看数组,我将显示对象的类型(Loot)。您需要展开它以查看对象内的值。
答案 1 :(得分:0)
但是,当我这样做时,我的广告资源会显示为
(Loot, Loot, Loot, Loot)
而不是项目名称(stone, hat, coal, diamond)
。
您需要迭代inventory
数组并记录所有项目的.type
属性:
for (var i=0; i<inventory.length; i++)
console.log(inventory[i].type);
或者你从项目类型构建另一个数组,这可以通过map
method最容易地完成:
var types = inventory.map(function(item) { return item.type; });
console.log(types);
答案 2 :(得分:-1)
数组不能包含字符串键。 显然你需要使用一个对象来存储这些对象。
function Loot(type, sellValue){
this.type = type;
this.sellValue = sellValue;
}
var inventory = {};
var inventory2 = {};
var stone = new Loot("craft", 20);
var stone1 = new Loot("craft1", 30);
var stone2 = new Loot("craft2", 40);
//or as follows:
inventory2['stone'] = stone;
inventory2['stone1'] = stone1;
inventory2['stone2'] = stone2;
console.log(inventory); // Object {craft: Loot, craft1: Loot, craft2: Loot}
console.log(inventory2); // Object {stone: Loot, stone1: Loot, stone2: Loot}