2016-04-29 20 views
3

Manchmal (wenn auch selten) benötigen Sie, anstatt überschreiben Mutter statische Eigenschaften, wie (der sehr lahm) Beispiel unten zu erweitern:Wie erweitern Sie statische Eigenschaften in ES Next?

class Person { 
    static coreStats = { 
     role: "slacker", 
     weapon: null, 
     speed: 4, 
     vechicle: "roller blades", 
    }; 
} 

class Ninja extends Person { 
    static coreStats = { 
     role: "silent assassin", 
     weapon: "katana", 
     speed: 99, 
    }; 
} 

console.log(Ninja.coreStats); // But vechicle is no more 

Wie man die statischen Eigenschaften in einer untergeordneten Klasse des erstreckt sich ohne clobbering Elterneigenschaften?

+0

Nur aus Neugier, sind statische Eigenschaften (nicht statische Methoden), Teil ES6? Oder gibt es dafür irgendwo einen TC39-Vorschlag? – nils

+0

Es gefunden: https://github.com/jeffmo/es-class-fields-and-static-properties – nils

+0

Rolled zurück die Änderung, weil ich spezifisch über ES2015 fragte. Wenn es 2015 nicht verfügbar ist, freue ich mich über die Antwort "nicht möglich in es2015" – Chris

Antwort

4

können Sie es wie folgt tun:

class Person { 
    static coreStats = { 
     role: "slacker", 
     weapon: null, 
     speed: 4, 
     vechicle: "roller blades", 
    }; 
} 

class Ninja extends Person { 
    static coreStats = Object.assign({}, Person.coreStats, { 
     role: "silent assassin", 
     weapon: "katana", 
     speed: 99 
    }); 
} 
console.log(Ninja.coreStats); 

Dies wird coreStats fusionieren und außer Kraft setzen Person.coreStats mit Ninja.coreStats bei Vervielfältigungen

+0

In Ninja: 'static coreStats = Object.assign ({}, Person.coreStats, { Rolle:" silent assassin ", Waffe:" katana ", Geschwindigkeit: 99 });'? – Apolo

+0

Bearbeitete Antwort gemäß @Apolo Vorschlag. Es sieht jetzt noch sauberer aus. –

+0

Das ist nicht gut, was passiert, wenn Sie 'Klasse Foo erweitert Person' tun? – Hitmands