Javascript:实例化对象数组的最佳方法

Javascript:实例化对象数组的最佳方法,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,最简单的方法是用构造函数创建的大量对象填充数组 我有一个用于制作电视和电影对象的构造函数: function Media(name, boxCover) { this.name = name; this.boxCover = boxCover; }; 我正在制作许多我想放入数组的对象。这不起作用: var table = [ var avengers = new Media("avengers",'../assets/boxcovers/avengers.jpg'); var

最简单的方法是用构造函数创建的大量对象填充数组

我有一个用于制作电视和电影对象的构造函数:

function Media(name, boxCover) {
    this.name = name;
    this.boxCover = boxCover;
};
我正在制作许多我想放入数组的对象。这不起作用:

var table = [
var avengers = new Media("avengers",'../assets/boxcovers/avengers.jpg');
var blade_runner = new Media("blade_runner",'../assets/boxcovers/blade_runner.jpg');
var brave = new Media("brave",'../assets/boxcovers/brave.jpg');
var catching_fire = new Media("catching_fire",'../assets/boxcovers/catching_fire.jpg');
var django = new Media("django",'../assets/boxcovers/django.jpg');
var finding_nemo = new Media("finding_nemo",'../assets/boxcovers/finding_nemo.jpg');
];
我还尝试将
table.push(
放在每行的开头。我真的需要像这样在数组中再次列出每个对象,还是可以省去重复的工作量:

table = [avengers, blade_runner, etc.

这种方法的语法是

var table = {
    mykey: myproperty,
    mykey2: myproperty2
};
如果希望变量成为对象,也就是说,您可以通过调用f.e
table.avengers
访问属性,您的声明应该如下所示:

var table = {
    avengers: new Media("avengers",'../assets/boxcovers/avengers.jpg'),
    blade_runner: new Media("blade_runner",'../assets/boxcovers/blade_runner.jpg'),
    brave: new Media("brave",'../assets/boxcovers/brave.jpg')
    //... and so on and so forth
};
如果您只希望能够循环通过它们,则可以将其创建为数组:

var table = [
    new Media("avengers",'../assets/boxcovers/avengers.jpg'),
    new Media("blade_runner",'../assets/boxcovers/blade_runner.jpg'),
    new Media("brave",'../assets/boxcovers/brave.jpg')
    //... and so on and so forth
];

您使用了错误的语法。请尝试以下方法:

function Media(name, boxCover) {
    this.name = name;
    this.boxCover = boxCover;
};

var table = [
 new Media('avengers','../assets/boxcovers/avengers.jpg'),
 new Media('blade_runner','../assets/boxcovers/blade_runner.jpg')         
];

像这样重写您的var表,这就是所需要的:

var table = [
  new Media("avengers",'../assets/boxcovers/avengers.jpg'),
  new Media("blade_runner",'../assets/boxcovers/blade_runner.jpg'),
  new Media("brave",'../assets/boxcovers/brave.jpg'),
  new Media("catching_fire",'../assets/boxcovers/catching_fire.jpg'),
  new Media("django",'../assets/boxcovers/django.jpg'),
  new Media("finding_nemo",'../assets/boxcovers/finding_nemo.jpg')
];

您也可以使用简单的语法,例如:

var mediatable = [];
var entry = {
    name: {},
    boxCover: {}
};
mediatable.push({
    name: "avengers",
    boxCover: '../assets/boxcovers/avengers.jpg'
});
mediatable.push({
    name: "blade_runner",
    boxCover: '../assets/boxcovers/blade_runner.jpg'
});
alert(mediatable.length);
或者使用对象推送它:

entry.name = "brave";
entry.boxCover = '../assets/boxcovers/brave.jpg';
mediatable.push(entry);
alert(mediatable.length + ":" + mediatable[1].name);

必须将变量声明和数组初始化器分开,不能在一个语句中同时完成这两项工作。
function Media(name, boxCover) {
    this.name = name;
    this.boxCover = boxCover;
};

function MediaTable(data) {
    var table = {};
    data.forEach(function(el){
        table[el[0]] = new Media(el[0], el[1])
    })

    return table;
};

var tableData = [
        ["avengers", '../assets/boxcovers/avengers.jpg'],
        ["blade_runner", '../assets/boxcovers/blade_runner.jpg'],
        ["brave" , '../assets/boxcovers/brave.jpg'],
        ["catching_fire", '../assets/boxcovers/catching_fire.jpg'],
        ["django", '../assets/boxcovers/django.jpg'],
        ["finding_nemo", '../assets/boxcovers/finding_nemo.jpg']
    ],
    table = new MediaTable(tableData);