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