2015-07-20 26 views
9

podczas Set jest obiektem, Object.freeze() prace dotyczące właściwości obiektu, który widocznie Mapa i Set nie używają: npCzy można "zamrozić" zestaw (lub mapę)?

 
let m = new Map(); 
Object.freeze(m); 
m.set('key', 55); 
m.get('key') ==> 55 

jest to zachowanie w Chrome i oczekuję, że to norma.

Rozumiem, że można (czasami) przekształcić zbiór lub mapę w zwykły obiekt, a następnie zamrozić obiekt. ale potem kluczowe zmiany dostępu między wersją odmrożoną a zamrożoną.

+1

Jakiego zestawu i mapy używasz? Nie widziałem takich w JavaScript – MaxZoom

+1

@MaxZoom: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map https://developer.mozilla.org/en-US/ docs/Web/JavaScript/Reference/Global_Objects/Set –

+0

Nie wygląda dobrze na przeglądarki mobilne. – MaxZoom

Odpowiedz

4

Interesujące pytanie, ale obecnie nie wygląda na obsługiwaną bezpośrednio funkcję na obiekcie Set lub Map.

Oto kilka obejścia mogę myśleć o użyciu obiektu Set jako przewodnika:

  1. Można by utworzyć obiekt proxy, który usuwa .add(), .clear() i .delete(), ale pozwolił proxy dostęp do wszystkich innych metody, które właśnie odczytują dane. To ukrywałoby dostęp do rzeczywistego obiektu Set, więc nie byłoby możliwości bezpośredniego dostępu do niego i zapewnienia dostępu do wszystkich innych metod.

  2. Można zastąpić .add(), .clear() i .delete() na danym Set przykład z metod, które nie zrobił nic, albo zwrócił wyjątek, które mogłoby zapobiec modyfikacji. Jeśli te metody zastąpienia nie są konfigurowalne, a następnie .freeze() obiektu, te metody nie mogą zostać zwrócone. Można jednak użyć obiektu Set.prototype.add bezpośrednio na obiekcie Set, aby nadal go ominąć.

+0

dzięki. Zgodzić się. pierwszy wydaje się dużo pracy, a jeden traci instancję Set. na drugim, przesłanianie '.add()' itp. wydaje się łatwiejsze, ponieważ powoduje błąd w trybie cichym lub powoduje błąd. jeśli chodzi o "nadal obejść", dla mnie główną zaletą zamrożenia nie jest całkowite bezpieczeństwo, ale raczej ochrona samego siebie, podobnie jak przy pisaniu zmiennych. –