【问题标题】:Javascript: Using constants name as a value in an ObjectJavascript:使用常量名称作为对象中的值
【发布时间】:2020-10-13 11:40:45
【问题描述】:

这里完全是菜鸟,所以我可能用错误的关键字搜索过。如果这个问题已经被回答了一百万次,我很抱歉。

我有一个构造函数:

function CreateTeam(teamId, name, matchesPlayed, won, drawn, ...)

为对象提供一些键,例如:teamIdteamNamematchesPlayedmatchesWon 等等。

当调用构造函数时,我会这样做:

const argentina = new CreateTeam ('a1', 'Argentina', 0, 0, 0, ...)

我想知道是否可以获取常量的名称并将其复制/粘贴为对象的值?在这种情况下,我想将其粘贴为第二个值(argentina.name 的值)

如果可以的话,我可以避免每次调用 CreateTeam 构造函数时都输入团队名称。

有什么建议吗?再次抱歉,如果之前已经回答过这个问题,我只是不太了解语法,无法搜索它。

【问题讨论】:

    标签: javascript object constants


    【解决方案1】:

    我没有找到任何官方文档表明这是不可能的,但 Stack Overflow 似乎表明它不是。而且我以前从未见过。

    查看Variable name as a string in JavascriptJavaScript: How to get the name of constant? Stack Overflow 问题,其中没有任何回答者声明这是可能的并提供“替代方案”,例如使用对象。

    另外,即使有可能,我也不推荐这种方法,因为它只会使代码更难理解。通常,类似的构造(例如 Function.name)速度很慢,并且并非在所有环境中都有效。

    【讨论】:

      【解决方案2】:

      您可以设置一个静态/可枚举对象,其中包含团队的预定义定义。

      然后,您可以将其中一个团队连同一般配置一起传递到函数中。拥有这两个对象后,您可以将它们分散到一个对象中并将属性解压缩到实例属性中。

      const Teams = {
        ARGENTINA : { id: 'a1', name: 'Argentina' },
        BRAZIL    : { id: 'b2', name: 'Brazil'    },
        CAMBODIA  : { id: 'c3', name: 'Cambodia'  }
      };
      
      function CreateTeam(team, config) {
        // Unpack the merged properties.
        const {
          teamId, name, matchesPlayed, wins, draws, losses
        } = { ...team, ...config };
        
        this.teamId = teamId;
        this.name = name;
        this.matchesPlayed = matchesPlayed;
        this.wins = wins;
        this.draws = draws;
        this.losses = losses;
      }
      
      CreateTeam.prototype.scoreCard = function() {
        return `${this.name} [ ${this.wins}W / ${this.draws}D / ${this.losses}L ]`
      };
      
      const argentina = new CreateTeam(Teams.ARGENTINA, {
        matchesPlayed: 10, wins: 7, draws: 1, losses: 2
      });
      
      console.log(argentina.scoreCard());

      【讨论】:

      • 我想如果我的目标是编写 LESS pr 实例,那么答案是否定的,这是不可能的。我希望有一些简单的 refer.name 或其他东西来解析为第二个键的值。我想我应该重新考虑一下整个设计,反正也没什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-19
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多