比較好奇那個 enumerable 是怎麼運作的。
如果手動設置 Parent.prototype.a = 'b' ,
那所有實例的 .a 屬性都會是 enumerable ;
但這和用 Object.create 的結果不一樣。
Object.create 會把繼承來的屬性設為 no enumerable ,
如果用自己實現的 cretae 函數也是:
function myCreate(parent) {
function F() {}
F.prototype = parent
return new F()
}
或是把 function 的 prototype 換掉:
function myClass() {}
myClass.prototype = {
say: function () { console.log('hey') },
foo: 'bar',
constructor: myClass
}
好像只有當原型鏈是指向的是 function 自帶的 prototype 時,
enumerable 才會作用,不知道為什麼規格要這樣定。
我本來以為 enumerable 是在定義屬性時就跟著的,
可是 Object.create 後會一律把來自原型鏈的都設為 no enumerable 。
用 hasOwnProperty 看,這些屬性不是在實例上,
但原型的 enumerable 還是 true ……。
總覺得很奇怪。