0

私は次のコードを持っています:

function Vanguard(name,grade,skill,power,shield,critical, type, nation, clan, race, imageURL){
    this.name = name;
    this.grade = grade;
    this.skill = skill;
    this.power = power;
    this.shield = shield;
    this.critical = critical;
    this.type = type;
    this.nation = nation;
    this.clan = clan;
    this.race = race;
    this.imageURL = imageURL;
};

var database = {};
database['asura kaiser'] = new Vanguard("Asura Kaiser", 3, "Twin Drive!!", 11000, 0, 1, "Normal Unit", "Star Gate", "Nova Grappler", "Battleroid", "http://images4.wikia.nocookie.net/__cb20120428001646/cardfight/images/thumb/a/a6/VGE_BT01-008EN.jpg/300px-VGE_BT01-008EN.jpg");
database['king of knights, alfred'] = new Vanguard("King of Knights, Alfred", 3, "Twin Drive!!", 10000, 0, 1, "Normal Unit", "United Sanctuary", "Royal Paladin", "Human", "http://images2.wikia.nocookie.net/__cb20121009013434/cardfight/images/thumb/9/95/BT01-001EN_RRR.jpg/300px-BT01-001EN_RRR.jpg");
database['dragonic overlord'] = new Vanguard("Dragonic Overlord", 3, "Twin Drive!!", 11000, 0, 1, "Normal Unit", "Dragon Sanctuary", "Kagerou", "Dragon", "");
database['ceo amaterasu'] = new Vanguard("CEO Amaterasu", 3, "Twin Drive", 10000, 0, 1, "Normal Unit", "United Sanctuary", "Oracle Think Tank", "Human", "");
database['alfred - early'] = new Vanguard("Alfred - Early", 3, "Twin Drive!!", 10000, 0, 1, "Normal Unit", "United Sanctuary", "Royal Paladin", "Human", "");

function printVanguard(p, name){
      for (var p in database[name]){
         document.getElementById('output').innerHTML +=('<b>' + p.charAt(0).toUpperCase() + p.slice(1) + '</b>: ' + database[name][p] + '<br />');
      }
};

printVanguard関数で、for var in loopを使用して、変数imageURLを除くすべてを出力する方法はありますか?現在、コードは機能していますが、VanguardオブジェクトのimageURL変数が出力されないようにコードを変更しようとしています。

(これは私の完全なコードではなく、関連するものだけです。私の完全なコードが必要な場合は、私に知らせてください。)

4

1 に答える 1

4

実際には、それは変数ではなく、プロパティです。簡単な条件を追加することで、出力を防ぐことができます。

   for (var p in database[name])
       if (p !== "imageURL")
           document.getElementById('output').innerHTML +=('<b>' + p.charAt(0).toUpperCase() + p.slice(1) + '</b>: ' + database[name][p] + '<br />');

にプロトタイプメソッドを追加する場合は、継承されたプロパティを省略しVanguardて使用することも検討してください。hasOwnPropertyただし、本番環境でこのコードを使用する場合は、オブジェクト全体だけを列挙するのではなく、プロパティを明示的に選択するか、データのみを含むネストされたオブジェクトを使用することをお勧めします。

または、列挙できないようにすることで、ループでプロパティをスキップできます。ただし、これはES 5の機能であり、古いブラウザでは機能しません。

this.imageURL = imageURL;
Object.defineProperty(this, "imageURL", {enumerable: false});
于 2013-02-03T17:35:28.573 に答える