![](/img/trans.png)
[英]Javascript inheritance of properties defined with Object.defineProperty
[英]How to List Properties Defined with Object.defineProperty
是否可以列出使用Object.defineProperty定義的所有屬性? 這些在遍歷對象時不會顯示:
for (var prop in obj) { ... }
而且都不帶Object.getOwnPropertyNames。
更新:我猜只有在創建帶有枚舉:true標志的情況下才有可能。
不可枚舉的屬性由返回Object.getOwnPropertyNames
:
var obj = {}; Object.defineProperty(obj, "foo", {value:42}); document.body.innerHTML = Object.getOwnPropertyNames(obj).join(", ");
如果使用Symbol
而不是字符串名稱定義它們,則可以使用Object.getOwnPropertySymbols
。
如果需要查找不可枚舉的繼承屬性,則必須通過Object.getPrototypeOf
循環原型鏈。
這是一個示例,該示例查找所有為字符串的屬性名稱,而不管它們是否是可枚舉的,包括繼承的名稱(請注意,我們在Object.prototype
上看到了不可枚舉的Object.prototype
;如果我們不想要它們,可以更早停止):
var proto = {} Object.defineProperty(proto, "answer", {value: 42}); var obj = Object.create(proto); Object.defineProperty(obj, "question", {value: "Life, the Universe, and Everything"}); document.body.innerHTML = getAllPropertyNames(obj).join(", "); function getAllPropertyNames(o) { var names = []; while (o) { // We'd use `o != Object.prototype` to stop earlier names.push.apply(names, Object.getOwnPropertyNames(o)); o = Object.getPrototypeOf(o); } return names; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.