Bug do IE8 na instrução JavaScript for-in?
Acho que encontrei um bug na manipulação do IE (IE8) para a instrução javascript for-in. Depois de várias horas resumindo isso em um pequeno exemplo, parece que o IE ignora especificamente qualquer propriedade chamada "toString" em um loop for-in - independentemente de estar em um protótipo ou ser uma "Propriedade Própria" do objeto.
Eu coloquei meucódigo de teste aqui:
function countProps(obj) {
var c = 0;
for (var prop in obj) {
c++;
}
return c;
}
var obj = {
toString: function() {
return "hello";
}
};
function test() {
var o = "";
var d = document.getElementById('output');
o += "<br/>obj.hasOwnProperty('toString') == " + obj.hasOwnProperty('toString');
o += "<br/>countProps(obj) = " + countProps(obj);
o += "<br/>obj.toString() = " + obj.toString();
d.innerHTML = o;
}
Isso deve produzir:
obj.hasOwnProperty('toString') == true
countProps(obj) = 1
obj.toString() = hello
mas no IE, estou recebendo:
obj.hasOwnProperty('toString') == true
countProps(obj) = 0
obj.toString() = hello
Esse invólucro especial de qualquer propriedade chamada 'toString' está causando estragos no meu código que tenta copiar métodos para um Function.prototype - minha função toString personalizada é sempre ignorada.
Alguém conhece uma solução alternativa? Isso é algum tipo de comportamento apenas no modo peculiar - ou apenas um BUG?