2015-07-05 4 views
5

Что проще всего было заполнить массив большим количеством объектов, созданных с помощью конструктора?Javascript: лучший способ создать экземпляр массива объектов

У меня есть функция-конструктор, чем делает ТВ и кино объектов:

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. 
+0

Вы должны отделить объявления переменных и инициализатор массива, вы не можете выполнять оба в одном утверждении. – RobG

ответ

5

Синтаксис для этого будет

var table = { 
    mykey: myproperty, 
    mykey2: myproperty2 
}; 

Если вы хотите, переменную быть объектом, который вы можете получить доступ к свойствам по телефону Fe 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 
]; 
1

Вы используете неправильный синтаксис. Попробуйте вместо этого:

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')   
]; 
-1

Перепишите ваш вар стола как это, что это все нужно:

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') 
]; 
0

Вы можете использовать простой синтаксис и такие, как:

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); 
0
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); 
Смежные вопросы