Je lis es5 ces jours-ci et je trouve que l'attribut [[configurable]] dans certaines propriétés intégrées de l'objet global est défini sur true, ce qui signifie que nous pouvons supprimer ces propriétés.
Par exemple:
la méthode join de l'objet Array.prototype possède des attributs
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
Nous pouvons donc facilement supprimer la méthode de jointure pour Array comme:
delete Array.prototype.join;
alert([1,2,3].join);
L'alerte s'affichera undefined
dans mon chrome 17, firefox 9, c'est-à-dire 10, voire ie6;
Dans Chrome 15 et safari 5.1.1, l'attribut [[configurable]] est défini sur true et le résultat de la suppression est également vrai, mais le résultat final l'est toujours function(){[native code]}
. On dirait que c'est un bug et que le chrome le corrige.
Je ne l'avais pas remarqué auparavant. À mon avis, la suppression des fonctions intégrées dans le code de l'utilisateur est dangereuse et entraînera autant de bogues lorsque vous travaillez avec d'autres, alors pourquoi ECMAScript prend-il cette décision?