Nicht enumerable Eigenschaften zurückgegeben von Object.getOwnPropertyNames
:
var obj = {};
Object.defineProperty(obj, "foo", {value:42});
document.body.innerHTML = Object.getOwnPropertyNames(obj).join(", ");
Wenn Sie sie mit Symbol
definieren, anstatt String-Namen, dann würden Sie Object.getOwnPropertySymbols
verwenden.
Wenn Sie nicht aufzählbare vererbte Eigenschaften finden müssen, müssen Sie Ihre Prototyp-Kette über Object.getPrototypeOf
schleifen.
Hier ist ein Beispiel für das Finden aller Eigenschaftsnamen, die Zeichenfolgen sind, unabhängig davon, ob sie aufzählbar sind, einschließlich geerbte (beachten Sie, dass wir die Nicht-Enumerables unter Object.prototype
sehen; wir könnten früher aufhören, wenn wir sie nicht möchten):
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;
}
Nicht enumerable Eigenschaften ** ** sind enthalten in dem Array von '.getOwnPropertyNames() zurückgegeben'. – Pointy
Können Sie mehr Code teilen? Insbesondere funktioniert WRT 'Object.getOwnPropertyNames' nicht? –