簡體   English   中英

如何列出用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM