Uso Object.freeze come mezzo per evitare di infrangere le mie regole. Vorrei che Object.freeze mi parlasse quando provo a fare un cattivo incarico. Tuttavia, Object.freeze fa semplicemente fallire i compiti in modo silenzioso! Ad esempio, se faccioC'è un modo per far sì che un oggetto "Object.frozen" lanci avvertimenti quando si tenta di cambiarlo?
/*
* Frozen singleton object "foo".
*/
var foo = (function() {
var me = {};
me.bar = 1;
if (Object.freeze) {
Object.freeze(me);
}
return me;
})();
foo.bar = 2;
console.log(foo.bar);
console registrerà "1", ma non sa che io abbia mai fatto una cattiva assegnazione. Questo ovviamente può portare a comportamenti pericolosi inaspettati nel mio codice, quando l'intero punto di congelamento dell'oggetto era quello di evitare l'imprevisto. In effetti, sono più propenso a ottenere un output dettagliato di errore non bloccando l'oggetto, lasciando che il cattivo compito abbia luogo e avendo il mio codice fallito in seguito a causa del valore errato.
Mi chiedo se JavaScript abbia un pragma nascosto di "avviso di oggetto immutabile" in qualsiasi browser, in modo che possa sapere quando tento di mutare un oggetto "Object.frozen".
Questo non è supportato in IE8 e versioni precedenti, e possibilmente in alcuni altri browser. Penso che tu stia solo cercando guai. Almeno, prova tutti i browser. –
@Hari, non sto usando Object.freeze in alcun modo che cambi il flusso del mio programma. Voglio solo usarlo come strumento di sicurezza per me stesso. Non oserei ** dipendere ** da una funzione non supportata! – Milosz