Estou lendo es5 hoje em dia e descobri que o atributo [[configurable]] em algumas propriedades internas do objeto global está definido como true, o que significa que podemos excluir essas propriedades.
Por exemplo:
o método de junção do objeto Array.prototype possui atributos
{[[Writable]]:true, [[Enumerable]]: false, [[Configurable]]: true}
Assim, podemos excluir facilmente o método de junção da matriz, como:
delete Array.prototype.join;
alert([1,2,3].join);
O alerta será exibido undefined
no meu cromo 17, firefox 9, ou seja, 10, ou seja, 6;
No Chrome 15 e safari 5.1.1, o atributo [[configurable]] está definido como true e o resultado da exclusão também é verdadeiro, mas o resultado final ainda é function(){[native code]}
. Parece que isso é um bug e o cromo corrige.
Eu não percebi isso antes. Na minha opinião, excluir funções internas no código do usuário é perigoso e causará muitos erros ao trabalhar com outras pessoas. Então, por que o ECMAScript toma essa decisão?
fonte
Respostas:
Eu tenderia a concordar com você, mas, por outro lado, acabei de encontrar uma situação em que precisava,
delete JSON.stringify
em determinadas circunstâncias, devido a um bug no Firefox 3.5 . Eu certamente estava feliz com a capacidade de consertar macacos embutidos lá.fonte
JSON.stringify
e a injeta, se necessário. Desculpas, não expliquei isso na minha resposta.Configurável não é sobre exclusão.
É sobre a capacidade de substituir um valor somente leitura.
É uma ferramenta muito poderosa, e os valores não configuráveis são frustrantes se você não puder excluí-los.
Eu tive alguns casos em que precisei corrigir um bug obscuro ou injetar funcionalidades ligeiramente diferentes (interceptação, log). Para isso, é necessário substituir o valor.
Exemplo:
A idéia é que, se você pode excluir propriedades, tem mais controle de metaprogramação. Se você não pudesse excluí-los, ficaria irritado com o idioma.
Não há uma boa razão para tornar as propriedades não deletáveis, a não ser para irritar as pessoas.
fonte
Pelo contrário. Permitir a personalização é bom porque permite que os autores do site tenham mais flexibilidade.
Se o autor do site precisar carregar o código de terceiros na mesma JS JS e desejar usar o analisador JS incorporado para fazer isso, ele sempre poderá proteger as propriedades configurando-as como não configuráveis antes de carregar o código de terceiros.
fonte