javascript - For Var In Loop - 我可以从中省略变量吗?

标签 javascript

我有以下代码:

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 但打印出除变量 imageURL 之外的所有内容?现在代码可以工作,但我希望对其进行修改,以便 Vanguard 对象中的 imageURL 变量不会打印出来。

(这不是我的完整代码,只是相关的代码。如果您需要我的完整代码,请告诉我。)

最佳答案

实际上它不是一个变量,而是一个属性。您可以通过添加一个简单的条件来阻止输出它:

   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 添加原型(prototype)方法,您也可以考虑使用 hasOwnProperty也省略继承的属性。但是,为了在生产中使用此代码,您希望不会仅枚举整个对象,而是显式选择属性或使用仅包含数据的嵌套对象。

或者您可以通过使其不可枚举来跳过循环的属性。然而,this是 ES 5 功能,无法在旧版浏览器中运行:

this.imageURL = imageURL;
Object.defineProperty(this, "imageURL", {enumerable: false});

关于javascript - For Var In Loop - 我可以从中省略变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14675172/

相关文章:

javascript - 在 mocha 单元测试中包含模块

javascript - 使用 react-beautiful-dnd 嵌套拖放

javascript - 如何在单击时添加事件类并在单击时删除事件类

javascript - Javascript 中的 IN 运算符功能类似于 SQL 中的

javascript - 使用字符串数组而不是整数数组创建 xAxys - Highcharts

javascript - 单独定位每个 DIV

javascript - 运行 setInterval 函数,停止 3 秒然后继续运行

javascript - 关闭网页时会发生什么?

javascript - 如何获取div的正确内容大小?

javascript - 重新呈现 View 后,event.currentTarget.innerHTML 在 IE10 中为空