类构造函数应仅接受某件事作为参数,否则会引发错误

问题描述

我对JavaScript还是很陌生,遇到了一个我无法逾越的令人沮丧的问题。

我正在TwilioQuest上进行练习,我的构造函数应仅接受“红色”,“黄色”或“蓝色”作为参数,否则会引发错误。这对我来说似乎正确,并且可以在控制台中进行测试,但是当我在游戏中“ HACK”时,TwilioQuest说我的构造函数应仅接受“红色”,“黄色”或“蓝色”作为参数。好吧...

This is my code mentioned above

解决方法

不,不是。您的构造函数很乐意接受任何参数,或者实际上不接受任何参数,因为A)您使用try / catch来抑制错误(不抛出任何错误),并且B)您从未使用过throw

删除try / catch,并在最后的throw中添加else。关键是抛出一个错误,突然终止构造函数,并阻止任何东西获取对其初始化对象的引用。

我还建议仅使用||if / else。重复this.color = color; 3次没有任何意义。

,

首先将对将所有有效颜色存储在数组中很有用。为了能够更改有效颜色列表而无需更新构造函数中的逻辑。

第二,我们可以使用Array.prototype.includes方法来检查所传递的参数(下面的代码中的{color)是否是数组的元素。

如果需要限制类Ducktypium的用户,则每次输入参数throw不在有效颜色列表中时,我们都应该color出现错误。

否则一切都很好,我们可以将参数color分配给prop color

const VALID_COLORS = ['red','yellow','blue']
class Ducktypium {
   constructor(color) {
      if (!VALID_COLORS.includes(color)) {
         throw new TypeError('invalid color')
      }
      this.color = color
   }
}