为什么输入参数有一个“对象等于另一个对象”传递给

时间:2018-08-23 21:32:52

标签: ecmascript-6 es6-class

我很困惑为什么下面的代码的输入参数传递了{ cabinet = 'spruce', distortion = '1', volume = '0' } = {}。这是否意味着从此类创建的所有新对象都包含已初始化的这些参数?为什么使用{ ... } = {}

class GuitarAmp {
  constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' } = {}) {
    Object.assign(this, {
      cabinet, distortion, volume
    });
  }
}

1 个答案:

答案 0 :(得分:1)

构造函数希望您传入具有属性cabinetdistortionvolume的单个对象。以这种方式编写参数,以使所有参数都是可选的,并为所有参数提供默认值。

其写法如下:

constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' } = {})

代替

constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' })

是允许不带任何参数的情况下调用它。只要传入一个对象,第二个示例就可以正常工作,但是如果您仅调用new GuitarAmp()就会失败,它将失败并显示:

  

TypeError:无法解构'undefined'或'null'的属性cabinet

添加= {}会为它提供一个默认的空对象,当没有任何内容传递给构造函数时,该对象将被销毁。