ES6-Konstruktor-Objekt param default-Werte
Ich versuche zu definieren, eine Javascript-Klasse, die mit einer definierten Konstruktor mit Parameter mit den meisten richtigen ES6-syntax. Auf den ersten, ist es einfach zu definieren, wie diese.
JS:
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);
Aber wenn ich versuche, mit destructuring zu definieren, default-Werte, für die einer der Parameter des Konstruktors (op2
eine Eigenschaft des verschachtelten Objekts options
),ich bin nicht in der Lage, damit es funktioniert, während für die id
Eigenschaft des Objekts, die ich in der Lage bin:
JS:
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);
Was ich erwarten sollte, ist, dass beim Debuggen mit console.log(test.options.op2)
druckt der Standard-Wert, der im Konstruktor, sondern ich bin gettting undefined
.
Ich würde auch gerne wissen, ob es eine richtige ES6-syntax bei der Definition von javascript-Klassen zu initialisieren class params.
{id = 'defaultId', options = { op2:'0'}} = {}
Sie ein Objekt, um ein leeres Objekt?- Nein, es ist ein leeres Objekt als Standard, wenn kein argument angegeben wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Default-Werte funktionieren nur auf dem einzigen parameter/property-Ebene. Wenn kein argument oder
undefined
übergeben wird, wird{}
wird für den ersten parameter. Wenn das Objekt nicht über eineid
Eigenschaft'defaultId'
verwendet werden. Wenn das Objekt nicht über eineoptions
Eigenschaft{op2:'0'}
verwendet werden. Wenn Sie das tun, übergeben Sie ein Objekt mit eineroptions
Eigenschaft, wird der default-Wert werden ignoriert.Also, wenn Sie einen Standardwert für die
op2
Eigenschaft des Objektes, wenn keine solche Eigenschaft gefunden wurde, in das Objekt, müssen Sie die Verwendung von destructuring auf dieoptions
Objekt selbst:Kann man eigentlich nicht hinzufügen fehlen die Eigenschaften eines Objekts, wie es nie Hinzugefügt, weil die Optionen-Objekt nicht fallback auf default-Werte. In diesem particaular Szenario wäre es viel einfacher diesen Weg gehen:
||
zu setzen, default-Wert, siehe Was bedeutet das Konstrukt x = x || y bedeuten?id
würde nicht mehr zu den default-Wert zugewiesen werden, zu Recht, wie es wird getan, als erwartet, denn es fehlt das Objektprops