2015-07-20 10 views
9

mentre Set è un oggetto, Object.freeze() lavori sulla proprietà dell'oggetto, che evidentemente mappa e Set non utilizzare: ad esempioE 'possibile "congelare" un Set (o una Mappa)?

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

questo è il comportamento in Chrome, e mi aspetto che è standard.

Capisco che si possa (a volte) trasformare l'insieme o la mappa in un oggetto normale e quindi bloccare l'oggetto. ma poi le modifiche di accesso chiave tra la versione congelata e congelata.

+1

Che set e mappa usi? Non ho visto tale in JavaScript – MaxZoom

+1

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

+0

Non sembra buono per i browser mobili. – MaxZoom

risposta

4

Domanda interessante, ma al momento non sembra una funzione direttamente supportata su un oggetto Set o Map.

Ecco alcuni work-around che posso pensare di utilizzare l'oggetto Set come guida:

  1. è possibile creare un oggetto proxy che ha rimosso .add(), .clear() e .delete(), ma ha permesso proxy l'accesso a tutti gli altri metodi che leggono solo i dati. Ciò nasconderebbe l'accesso all'oggetto reale Set in modo che non ci fosse alcun modo per accedervi direttamente e fornire l'accesso con proxy a tutti gli altri metodi.

  2. Si potrebbe ignorare .add(), .clear() e .delete() su un dato Set un'istanza con metodi che non ha fatto nulla o ha generato un'eccezione che impedirebbe la modifica. Se hai reso questi metodi di sovrascrittura non configurabili e poi hai fatto un .freeze() sull'oggetto, questi metodi non potrebbero essere ripristinati. Si potrebbe usare Set.prototype.add direttamente sull'oggetto Set per aggirarlo comunque.

+0

grazie. essere d'accordo. il primo sembra molto lavoro e uno perde 'instanceof Set'. al secondo, sovrascrivere '.add()' etc, sembra più facile, averlo fallito in modo silenzioso o generare errori. per quanto riguarda "ancora bypassato", per me il principale vantaggio del congelamento non è la sicurezza assoluta ma piuttosto la protezione di me stesso, proprio come le variabili di battitura. –

Problemi correlati