我很困惑为什么下面的代码的输入参数传递了{ cabinet = 'spruce', distortion = '1', volume = '0' } = {}
。这是否意味着从此类创建的所有新对象都包含已初始化的这些参数?为什么使用{ ... } = {}
?
class GuitarAmp {
constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' } = {}) {
Object.assign(this, {
cabinet, distortion, volume
});
}
}
答案 0 :(得分:1)
构造函数希望您传入具有属性cabinet
,distortion
和volume
的单个对象。以这种方式编写参数,以使所有参数都是可选的,并为所有参数提供默认值。
其写法如下:
constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' } = {})
代替
constructor ({ cabinet = 'spruce', distortion = '1', volume = '0' })
是允许不带任何参数的情况下调用它。只要传入一个对象,第二个示例就可以正常工作,但是如果您仅调用new GuitarAmp()
就会失败,它将失败并显示:
TypeError:无法解构'undefined'或'null'的属性
cabinet
。
添加= {}
会为它提供一个默认的空对象,当没有任何内容传递给构造函数时,该对象将被销毁。