Sto leggendo es5 in questi giorni e ho trovato che l'attributo [[configurabile]] in alcune proprietà built-in dell'oggetto globale è impostato su true, il che significa che possiamo eliminare queste proprietà.
Ad esempio:
il metodo di join dell'oggetto Array.prototype ha attributi
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
Quindi possiamo facilmente eliminare il metodo di join per Array come:
delete Array.prototype.join;
alert([1,2,3].join);
L'avviso mostrerà undefined
nel mio chromium 17, firefox 9, cioè 10, even ie6;
In Chrome 15 e amp; safari 5.1.1 l'attributo [[configurable]] è impostato su true e il risultato delete è anche true ma il risultato finale è ancora function(){[native code]}
. Sembra che questo sia un bug e Chromium lo risolva.
Non l'ho notato prima. A mio parere, eliminare le funzioni integrate nel codice utente è pericoloso e farà emergere così tanti bug quando si lavora con altri. Quindi perché ECMAScript prende questa decisione?