Object.definePropertyを使用して定義されたすべてのプロパティをリストすることは可能ですか?リストの表示方法Object.definePropertyで定義されたプロパティ
for (var prop in obj) { ... }
どちらもObject.getOwnPropertyNamesと:オブジェクトを繰り返し処理しながら、 これらは表示されません。
更新:これは、enumerable:trueフラグを設定して作成した場合のみ可能です。
Object.definePropertyを使用して定義されたすべてのプロパティをリストすることは可能ですか?リストの表示方法Object.definePropertyで定義されたプロパティ
for (var prop in obj) { ... }
どちらもObject.getOwnPropertyNamesと:オブジェクトを繰り返し処理しながら、 これらは表示されません。
更新:これは、enumerable: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
の非列挙型を参照してください。 ):
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;
}
私はあなたのオープニングセンテンスをコピーしていないことを絶対に誓っています。 – Pointy
@Pointy:LOL !!大好きです。強調とすべて。 –
非列挙特性** '.getOwnPropertyNames() 'から返された配列に含まれています。 – Pointy
もっとコードを共有できますか?特にWRT 'Object.getOwnPropertyNames'は動作しませんか? –