【发布时间】:2017-04-01 00:23:49
【问题描述】:
我正在尝试用最合适的 ES6 语法定义一个带有已定义构造函数的 Javascript 类。一开始,这样定义很容易。
let param1 = 10;
let param2 = 'foo';
let param3 = 200;
let param4 = 'bar';
let props = {id: param1, options: { op1: param2, op2: param3, op3: param4 }};
console.log('Object props');
console.log(props);
class Test {
constructor(props){
this.id = props.id;
this.options = props.options;
}
}
let test1 = new Test(props);
console.log('Class test1');
console.log(test1.id);
console.log(test1.options.op2);
但是当我尝试使用解构来定义默认值时,对于构造函数的一个参数(op2,嵌套对象options 的属性),我无法使其工作,而对于我能够的对象的id 属性:
let param1 = 10;
let param2 = 'foo';
let param3 = 200;
let param4 = 'bar';
let props = {options: { op1: param2, op3: param4 }};
console.log('Object props');
console.log(props);
class Test {
constructor({id = 'defaultId', options = { op2:'0'}} = {}){
this.id = id;
this.options = options;
}
}
let test = new Test(props);
console.log('Class test');
console.log(test.id);
console.log(test.options);
console.log(test.options.op2);
我应该期待的是,当使用console.log(test.options.op2) 进行调试时,会打印构造函数中设置的默认值,但我却得到了undefined。
另外我想知道在定义 javascript 类来初始化类参数时是否有更合适的 ES6 语法。
【问题讨论】:
-
{id = 'defaultId', options = { op2:'0'}} = {}你正在将一个对象设置为一个空对象? -
@KevinKloet 不,如果没有提供参数,它将使用空对象作为默认值。
标签: javascript class constructor ecmascript-6