Estoy leyendo es5 en estos días y encuentro que el atributo [[configurable]] en algunas propiedades integradas del objeto global está establecido en verdadero, lo que significa que podemos eliminar estas propiedades.
Por ejemplo:
el método de combinación del objeto Array.prototype tiene atributos
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
Por lo tanto, podemos eliminar fácilmente el método de combinación para Array como:
delete Array.prototype.join;
alert([1,2,3].join);
La alerta se mostrará undefineden mi cromo 17, firefox 9, es decir 10, incluso ie6;
En Chrome 15 y safari 5.1.1, el atributo [[configurable]] se establece en verdadero y el resultado de eliminación también es cierto, pero el resultado final aún lo es function(){[native code]}. Parece que esto es un error y el cromo lo soluciona.
No lo he notado antes. En mi opinión, eliminar las funciones integradas en el código del usuario es peligroso y generará tantos errores al trabajar con otros. Entonces, ¿por qué ECMAScript toma esta decisión?