我一直在读关于Go4的"构建器模式".你可以在这里阅读更多关于这种模式的信息:https://www.sohamkamani.com/javascript/builder-pattern/

我不明白为什么我们不能像这样在单个参数对象中传递多个参数

constructor({ name, age, address, phoneNum, email }) {
   this.name = name; 
   this.age = age; 
   this. address = address; 
   this.phoneNum = phoneNum; 
   this.email = email; 
} 

在我看来,这比创建构建器类容易得多.

我是不是遗漏了什么?

推荐答案

是的,你是对的,只使用参数是可能的.

已知最佳实践是为方法使用较少数量的参数以提高可读性,最好使用Builder通过使用方法的显式名称来创建某些对象(例如,石屋和木屋)的不同表示.

此外,Builder图案解决了the following problem:

使用Builder模式来消除"伸缩构造函数".

假设您有一个具有10个可选参数的构造函数.调用这样的野兽非常不方便;因此,您重载了构造函数,并使用更少的参数创建了几个较短的版本.这些构造函数仍然引用主要的构造函数,将一些缺省值传递给任何省略的参数.

class Pizza {
    Pizza(int size) { ... }
    Pizza(int size, boolean cheese) { ... }
    Pizza(int size, boolean cheese, boolean pepperoni) { ... }
    // ...

Builder模式允许您逐步构建对象,只使用您真正需要的那些步骤.在实现该模式之后,您不必再将数十个参数塞进您的构造函数.

Javascript相关问答推荐

如何在NightWatch.js测试中允许浏览器权限?

根据总价格对航班优惠数组进行排序并检索前五个结果- Angular HTTP请求

如何才能拥有在jQuery终端中执行命令的链接?

Google图表时间轴—更改hAxis文本 colored颜色

查找最长的子序列-无法重置数组

在286之后恢复轮询

如何在Vue 3中创建自定义 Select 组件,并将选项作为HTML而不是props 传递?

Prisma具有至少一个值的多对多关系

无法使用单击按钮时的useState将数据从一个页面传递到另一个页面

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

TypeError:无法分解';React2.useContext(...)';的属性';basename';,因为它为空

如何在和IF语句中使用||和&;&;?

如何在AG-Grid文本字段中创建占位符

有没有办法更改Chart.js 3.x.x中主要刻度的字体?

每隔3个项目交替显示,然后每1个项目交替显示

MongoDB通过数字或字符串过滤列表

如何压缩图像并将其编码为文本?

如何在Reaction中设置缺省值, Select 下拉列表,动态追加剩余值?

Reaction路由v6.4+数据API:重试加载程序而不显示错误

浮动标签效果移除时,所需的也被移除