Wie fügen Sie Mixins zu ES6 Javascript-Klassen hinzu?

9

Wie können Sie in einer ES6-Klasse mit einigen Instanzvariablen und Methoden einen Mix hinzufügen? Ich habe unten ein Beispiel gegeben, obwohl ich nicht weiß, ob die Syntax für das Mixin-Objekt korrekt ist.

%Vor%

Wenn ich (new Test()).test() starte, wird es fehlschlagen, weil es in der Klasse kein method2 gibt, da es sich um das Mixin handelt. Deshalb muss ich der Klasse die Mixin-Variablen und -Methoden hinzufügen.

Ich sehe, es gibt eine Lodash-Mixin-Funktion Ссылка , aber ich weiß nicht, wie ich es benutzen könnte ES6-Klassen. Mir geht es gut, wenn ich lodash für die Lösung verwende, oder einfach nur JS ohne Bibliotheken, um die Mixin-Funktionalität bereitzustellen.

    
user779159 15.02.2017, 10:59
quelle

2 Antworten

14

Das Objekt / Eigenschaft-System von Javascript ist viel dynamischer als die meisten anderen Sprachen, so dass es sehr einfach ist, einem Objekt Funktionalität hinzuzufügen. Da Funktionen erstklassige Objekte sind, können sie auf genau dieselbe Weise zu einem Objekt hinzugefügt werden. Object.assign ist die Methode zum Hinzufügen der Eigenschaften eines Objekts ein anderes Objekt. (Sein Verhalten ist in vielerlei Hinsicht vergleichbar mit _.mixin .)

Klassen in Javascript sind nur syntaktische Zucker, die das Hinzufügen eines Konstruktor / Prototyp-Paares einfach und klar machen. Die Funktionalität hat sich gegenüber dem Code vor ES6 nicht geändert.

Sie können die Eigenschaft zum Prototyp hinzufügen:

%Vor%

Sie könnten es im Konstruktor zu jedem erstellten Objekt hinzufügen:

%Vor%

Sie können es im Konstruktor basierend auf einer Bedingung hinzufügen:

%Vor%

Oder Sie können es einem Objekt zuweisen, nachdem es erstellt wurde:

%Vor%     
lonesomeday 15.02.2017, 12:58
quelle
1

Sie sollten sich wahrscheinlich Object.assign() ansehen. Muss etwa so aussehen:

%Vor%

Dadurch wird sichergestellt, dass alle Methoden und Eigenschaften von mixin in das Prototypobjekt von Test constructor kopiert werden.

    
Mister Spock 15.02.2017 11:07
quelle