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?

questionAnswers(2)

yourAnswerToTheQuestion