从另一个创建一个新对象并从一个数组中读取它。 (JavaScript)的

时间:2014-01-31 09:02:05

标签: javascript arrays object inheritance

我有以下示例构造函数:

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)

我该如何解决这个问题?我想它需要某种形式的继承?

谢谢!

3 个答案:

答案 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}

http://jsbin.com/aNiXolo/5/edit