während Set
ein Objekt ist, arbeitet Object.freeze()
mit den Eigenschaften des Objekts, die Map und Set offensichtlich nicht verwenden: zB
Das ist das Verhalten in Chrome, und ich erwarte, dass es Standard ist.
Ich verstehe, dass man (manchmal) das Set oder die Map in ein normales Objekt transformieren und dann das Objekt einfrieren kann. Aber dann ändert sich der Schlüsselzugriff zwischen der ungefroteten und der eingefrorenen Version.
Interessante Frage, aber scheint momentan nicht wie eine direkt unterstützte Funktion auf einem Objekt Set
oder Map
zu sein.
Hier sind einige Problemumgehungen, an die ich denken kann, indem ich das Set
-Objekt als Leitfaden benutze:
Sie könnten ein Proxy-Objekt erstellen, das .add()
, .clear()
und .delete()
entfernt, aber den Zugriff auf alle anderen Methoden, die gerade Daten lesen, proxiediert hat. Dies würde den Zugriff auf das tatsächliche Set
-Objekt verbergen, so dass es keine Möglichkeit gibt, direkt darauf zuzugreifen und proxied Zugriff auf alle anderen Methoden bereitzustellen.
Sie konnten .add()
, .clear()
und .delete()
für eine angegebene Set
-Instanz mit Methoden überschreiben, die nichts getan haben oder eine Ausnahme ausgelöst haben, die eine Änderung verhindern würde. Wenn Sie diese Überschreibungsmethoden nicht konfigurierbar gemacht haben und dann .freeze()
für das Objekt ausgeführt haben, können diese Methoden nicht zurückgesetzt werden. Man könnte Set.prototype.add
direkt am Objekt Set
verwenden, um es trotzdem zu umgehen.
Tags und Links javascript object dictionary set