2017-03-15 2 views
1

sah ich den folgenden Code ES6 und war verwirrt:Was ist diese Syntax: {Variable1, Variable2, Variable3}?

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

Was der zweite Parameter auf Object.assign? Es ist kein Objekt, also was ist es? Ich habe gerade bemerkt, es ist Teil der Konstruktorargumente ist auch dieser Teil:

{ cabinet = 'spruce', distortion = '1', volume = '0' } = {} 

Ich bin nicht vertraut mit dieser neuen Syntax, damit ich weiß nicht, wie es zu sehen, da ich nicht weiß, was es heißt . Wer kennt den Begriff?

+0

[Destrukturierung Aufgabe] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) – pawel

+3

Suche nach "Shorthand Eigenschaftsnamen (ES2015)" in der oben genannten Link - im Grunde ist es gleich "Object.assign (this, { Schrank: Gehäuse, Verzerrung: Verzerrung, Volumen: Volumen });' –

+0

@Aerovistae Es ist nicht drei Parameter, es ist ein Parameter-Objekt, das destrukturiert ist. – Bergi

Antwort

3

also in dem obigen Code, glaube ich:

{ 
    cabinet, distortion, volume 
} 

in ES5 ist:

{ 
    cabinet: cabinet, 
    distortion: distortion, 
    volume: volume, 
} 

Es ist nur eine Kurzform das Objekt des Schreibens, wenn der Schlüssel und Wert sind die gleichen .

+0

Fun Tatsache: Dies funktioniert auch für Funktionen. 'Funktion myFunction() {}'. 'var obj = {meineFunktion}'. oder: 'var obj = {myFunction() {}}'. – Jelle

+1

Darf ich für zukünftige Leser bemerken, dass diese Syntax nur mit zuvor deklarierten Variablen funktioniert und keine Literale erlaubt. 'Var d = {'a', 'b', 'c'}' wird ein Fehler sein. Macht Sinn. Es ist nur eine Kurzform für das Gruppieren einiger Variablen in ein Objekt. – Aerovistae

1

Der Standardwert des ersten param {} ist, aber wenn es vorhanden ist, haben wir die Standardwerte in der ersten param Objekt wie cabinet = 'spruce', distortion = '1', volume = '0'

Daher verschachtelt, wenn erste Objekt param mit beispielsweise vorgesehen ist, { cabinet = 'test', distortion = '4', volume = '2' } dann würde this sein als

{ 
    cabinet: 'test', 
    distortion: '4', 
    volume: '2' 
} 

sonst folgt, wird es die Standardwerte in param zur Verfügung gestellt haben.

1

Es ist ein Objektliteral, das die Kurzschreibensyntax verwendet. Es ist nur syntaktischer Zucker.

var a = "A"; 
var b = "B"; 
var c = "C"; 

Diese beiden sind die gleichen:

{ a: a, b: b, c: c } 
{ a, b, c } 

Mit anderen Worten, wenn Sie die Eigenschaft Name wörtlichen eine Variable in das Objekt werfen dann, dass der Variablennamen werden wird.