簡體   English   中英

Javascript:實例化對象數組的最佳方法

[英]Javascript: best way to instantiate an array of objects

最簡單的方法是使用構造函數創建的大量對象填充數組?

我有一個構造函數,而不是制作電視和電影對象:

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
};

如果希望變量成為對象,即可以通過調用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
];

您使用了錯誤的語法。 嘗試以下方法:

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 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);

像這樣重寫您的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')
];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM