Eigenschaften zu Nicht-Prototypen mit Dekoratoren zuweisen

8

Ich baue eine einfache Zuordnung zwischen Frontend / Backend-Datenstruktur. Dafür habe ich einen Decorator erstellt, der wie folgt aussieht:

%Vor%

Und so benutze ich es:

%Vor%

Das Problem, das ich sehe, ist, dass anstelle des eigentlichen Objekts, das an den Dekorator übergeben wird, immer sein Prototyp ist:

%Vor%

Das bedeutet, dass ich, während ich der Instanz im Decorator Material hinzufüge, immer an den Prototyp angehängt bin, was wiederum bedeutet, dass Eigenschaften, die nur die VW -Instanz definieren sollen, auch auf AbstractCar verfügbar sind. und die Klasse BMW (in diesem Beispiel wäre dies yearEstablished ). Dies macht es unmöglich, zwei Eigenschaften mit demselben Namen, aber unterschiedlichen API-Feldern in zwei verschiedenen Klassen zu haben.

Gibt es eine Möglichkeit, dieses Verhalten zu umgehen?

    
just Nik 25.11.2015, 11:16
quelle

2 Antworten

4

Im Moment fügen alle drei Klassen dem selben Objekt Eigenschaften hinzu. Der Schlüssel, um dies zu beheben, besteht darin, das Objekt in target.data zu klonen , so dass jede Klasse ein anderes Objekt verwendet, anstatt alle auf dasselbe Objekt zu verweisen.

Hier ist ein einfacheres Beispiel, das eine Möglichkeit zeigt:

%Vor%     
David Sherret 25.11.2015, 15:35
quelle
4

Das Problem ist, dass public in einer Klasse kein Standard-JavaScript ist, sondern nur etwas, was TypeScript tut. Deshalb musst du vorsichtig sein, denn alles, was du tust, könnte in der Zukunft brechen.

Eine Möglichkeit besteht darin, Object.assign() zum Hinzufügen von Instanzeigenschaften zu verwenden (IINM, apiFieldsBag sollte vom Objekt, das vom Objektliteral erstellt wurde, an this übergeben werden):

%Vor%     
Axel Rauschmayer 25.11.2015 12:10
quelle