Ecmascript 6 为什么输入参数将“对象等于另一个对象”传递到

Ecmascript 6 为什么输入参数将“对象等于另一个对象”传递到,ecmascript-6,es6-class,Ecmascript 6,Es6 Class,我不明白为什么下面代码的输入参数传入了{cabinet='struce',distortion='1',volume='0'}={}。这是否意味着所有基于该类创建的新对象都包含这些已初始化的参数?为什么要用这个 class GuitarAmp { constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' } = {}) { Object.assign(this, { cabinet, distort

我不明白为什么下面代码的输入参数传入了{cabinet='struce',distortion='1',volume='0'}={}。这是否意味着所有基于该类创建的新对象都包含这些已初始化的参数?为什么要用这个

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

构造函数希望您传入一个属性为cabinet、distortion和volume的对象。以这种方式编写参数是为了使所有参数都是可选的,并为所有参数提供默认值

之所以这样写,是因为:

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

constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' })
就是允许在没有任何参数的情况下调用它。只要传入对象,第二个示例就可以正常工作,但如果只调用new GuitarAmp,它将失败:

TypeError:无法分解“未定义”或“null”的属性文件柜

添加={}将在没有任何内容传递到构造函数时为其提供一个默认的空对象进行解构