for-in javascriptステートメントのIE(IE8)処理にバグを見つけたと思います。これを小さな例にまとめて数時間後、IEは、プロトタイプにあるかオブジェクトの「独自のプロパティ」であるかに関係なく、for-inループで「toString」と呼ばれるプロパティを具体的にスキップするように見えます。
ここにテストコードを配置しました:
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;
}
これにより、次のようになります。
obj.hasOwnProperty('toString') == true
countProps(obj) = 1
obj.toString() = hello
しかし、IEでは、次のようになります。
obj.hasOwnProperty('toString') == true
countProps(obj) = 0
obj.toString() = hello
'toString'と呼ばれるプロパティのこの特別なケーシングは、メソッドをFunction.prototypeにコピーしようとする私のコードで大混乱を引き起こしています-私のカスタムtoString関数は常にスキップされます。
誰かが回避策を知っていますか?これはある種の癖(モードのみの動作)ですか、それとも単なるバグですか?