屬性列舉與原型關係
1 2 3 4 5 6 7 8 9 10 11
| function Person(e) {}; Person['prototype']['name'] = '人類';
var casper = new Person(); casper['a'] = undefined;
console.log(casper);
console.log(casper.hasOwnProperty('a')); console.log(casper.hasOwnProperty('b')); console.log(casper.hasOwnProperty('name'));
|
就算我們把屬性的值設定為undefined
,屬性依舊是存在的,只是它的值是undefined
。
hasOwnProperty
是對當前的物件去找屬性,不會去找原型的屬性,所以hasOwnProperty('name')
這裡會顯示false
。
1 2 3 4 5 6 7 8 9 10 11
| function Person(e) {}; Person['prototype']['name'] = '人類';
var casper = new Person(); casper['a'] = undefined;
console.log(casper); for (var key in casper) { console.log(key); };
|
當原型的內容是可被列舉的情況下,利用for in
一樣是可以把原型的內容列舉出來的
(原生的屬性基本上都是不可列舉的 enumerable: false
)
如果不想要把原型的屬性列舉出來的話可以這樣 ↓
1 2 3 4 5
| for (var key in casper) { if (casper.hasOwnProperty(key)) { console.log(key); } }
|
這樣就能夠只叫出casper
的屬性,且不會把原型可列舉的屬性叫出來。