我正在尝试在javascript中构建一个对象数组。 不知怎的,我找不到我想找的答案。是的,我确实在搜索问题。
因此传统对象具有明显的属性,例如:
项目是对象
item = new Object();
使用属性和方法
item.name = "sword"; // "sword" being the string name of the object
item.buy = buy; //buy being a function to add said item
那很好,我明白了。
我也得到阵列。
我的问题是,如果我想说出这些对象中的20个,我怎样才能在数组中制作它们而不是制作许多对象
例如,我知道我可以做到这一点。
item1 = new Object();
item1.name = "sword";
item1.buy = buy;
item2 = new Object();
item2.name = "shield";
item2.buy = buy;
但是,我想做这样的事情
item = new Array();
item[0].name = "sword";
item[0].buy = buy;
item[1].name = "shield";
item[1].buy = buy;
也许这很明显,但我在这里没有弄错。
当我试图打电话时
item[0].buy();
我遇到错误“Uncaught TypeError:Object 0没有方法'buy'”而item [0] .name未定义。
我做错了什么,我该怎么做?
答案 0 :(得分:3)
我的猜测是你想要的是一个对象数组:
var item = new Array();
item[0] = {};
item[0].name = "sword";
item[0].buy = function() { return this.name };
item[0].buy();
// -> "sword"
答案 1 :(得分:2)
// create a new array
var items = [];
// You can push objects onto the array as literals like this
items.push({
name: "sword",
buy: buy
});
// Or you can create the new object as you're doing currently
var item = new Object();
item.name = "shield";
item.buy = buy;
// And push it onto the array as before
items.push(item);
// Now you can access each object by it's index in the array
items[0].buy();
console.log(items[1].name); // "shield"
答案 2 :(得分:0)
因为,您没有在数组的0
索引处创建任何对象,而buy
应该是一个函数
item = new Array();
// create an object at 0/first index of array which is equivalent of new Object
item[0] = {};
// create property 'name' and assign value ("sword") to it
item[0].name = "sword";
// create another property and assign a function as it's value
// so buy is a method of the first object that is in in the item array
item[0].buy = function(){
return 'buy called';
};
// call 'buy' method from the first object of item array
console.log(item[0].buy());
答案 3 :(得分:0)
你可以使用这样的文字:
var items = [{
name: '1',
buy: buy
}, {
name: '2',
buy: buy
}, {
name: '3',
buy: buy
}];
但我会考虑使用原型,因为buy
是一种共享方法:
function Item(name) {
this.name = name;
}
Item.prototype.buy = function() {
...
};
var items = [
new Item('1'),
new Item('2'),
new Item('3')
];
items[1].buy();
答案 4 :(得分:0)
可以将语法简化为:
var arr=[
{name:'foo',age:49},
{name:'GG', age:12},
{name:'MMMM', age:16}
];
一切都取决于您的总体目标。
使用var xyz={}
与为new Object()
明确写出[]
以启动新数组相同
答案 5 :(得分:0)
您可以创建一个名为Item
的函数,它将返回一个名为property的对象,然后使用prototype
将方法附加到它上面。虽然JavaScript没有类,但它的行为与它类似。
function Item(name) {
this.name = name
}
Item.prototype.buy = function() {
// your code to buy an item
// you can access your item's name property here by using this.name
alert("You bought the item " + this.name)
}
然后,您可以实例化此函数并将返回的对象添加到数组中:
var items = []
items.push(new Item('sword'))
items.push(new Item('shield'))
items[0].buy() // will buy the item "sword"
items[1].buy() // will but the item "shield"
答案 6 :(得分:0)
看起来好像没有通过items.push(item1)
将项添加到数组中item1 = {};
item2 = {};
item1.name = "a";
item2.name = "b";
var buy = function() { console.log('buying... '+this.name); };
item1.buy = buy;
item2.buy = buy;
var items = [];
items.push(item1);
items.push(item2);
items[0].buy();