Я пытаюсь определить класс Javascript с определенным конструктором с параметрами с самым правильным синтаксисом ES6. Сначала это легко определить.ES6 конструктор object param значения по умолчанию
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);
Но когда я пытаюсь использовать деструктурирующие для определения значений по умолчанию для одного из Params из конструктора (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
.
Также я хотел бы знать, есть ли более подходящий синтаксис ES6 при определении классов javascript для инициализации параметров класса.
'{ид = ' defaultId ', options = {op2:' 0 '}} = {} 'Вы устанавливаете объект в пустой объект? –
@KevinKloet Нет, он использует пустой объект по умолчанию, если аргумент не указан. – Bergi