試してみましたが、おそらく解釈の違いによるものでしょう
prototypeで設定したプロパティは普通に参照できますが
上書きした時にIEはenumerableな状態になりそれ以外はenumerableではない状態
となるようです。
javascript
1function Hoge(){this.c='c1';}
2Hoge.prototype.a='a1';
3var obj1 = new Hoge();
4Object.defineProperty(obj1, 'b', {value: 'b1'});
5for(var i in obj1){
6 console.log("obj1:"+i+":"+obj1[i]);
7}
8
9var obj2 = new Hoge();
10Object.defineProperty(obj2, 'a', {value: 'a2'});
11Object.defineProperty(obj2, 'b', {value: 'b2'});
12Object.defineProperty(obj2, 'c', {value: 'c2'});
13for(var i in obj2){
14 console.log("obj2:"+i+":"+obj2[i]);
15}
16
17var obj3 = new Hoge();
18Object.defineProperty(obj3, 'a', {enumerable: true});
19Object.defineProperty(obj3, 'b', {enumerable: true});
20Object.defineProperty(obj3, 'c', {enumerable: true});
21for(var i in obj3){
22 console.log("obj3:"+i+":"+obj3[i]);
23}
24
25var obj4 = new Hoge();
26Object.defineProperty(obj4, 'a', {value: 'a4',enumerable: true});
27Object.defineProperty(obj4, 'b', {value: 'b4',enumerable: true});
28Object.defineProperty(obj4, 'c', {value: 'c4',enumerable: true});
29for(var i in obj4){
30 console.log("obj4:"+i+":"+obj4[i]);
31}
※一部サンプルの詳細を追記
仕様上どちらかが間違っている(バグ)可能性もありますし
どちらでも解釈上問題ないような気もします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/18 12:10