Ich habe eine einfache ES6-Klasse, so:
%Vor% Ich möchte es so einrichten, dass die Indexierung für Ring-Objekte umbrochen wird, sodass new Ring(1, 2, 3)[3]
1 zurückgibt, new Ring(1, 2, 3)[-1]
3 zurückgibt und so weiter. Ist das in ES6 möglich? Wenn ja, wie würde ich es umsetzen?
Ich habe über Proxys gelesen, die einen vollständig angepassten Getter erlauben, aber ich kann nicht herausfinden, wie man einen Proxy auf eine Klasse anwendet. Ich habe das geschafft:
%Vor% myRing
ist jetzt ein Ring-Objekt, das das Umbrechen von Indizes unterstützt. Das Problem ist, dass ich jedesmal solche Ring-Objekte definieren müsste. Gibt es eine Möglichkeit, diesen Proxy auf die Klasse anzuwenden, so dass der Aufruf von new Ring()
es zurückgibt?
Warnung: Dies ist ein hässlicher Hack
Dies ist ein ziemlich einfacher Ansatz, wenn Sie darüber nachdenken.
%Vor% Dies hat eine Funktion ClassToProxy
definiert. Das erste Argument ist die Klasse, der Sie auch Verhalten hinzufügen möchten, und die zweite ist der Handler.
Hier ist Beispiel Verwendung:
%Vor%Tags und Links javascript ecmascript-6 es6-class es6-proxy