Dieser Artikel benötigt eine redaktionelle Überprüfung. So können Sie helfen.
Diese Übersetzung ist unvollständig. Bitte helfen Sie, diesen Artikel aus dem Englischen zu übersetzen.
Die Object.getOwnPropertyNames()
Methode gibt einen Array mit allen Eigenschaftsnamen (aufzählbar oder nicht) zurück, welche direkt auf einem Objekt gefunden werden.
Syntax
Object.getOwnPropertyNames(obj)
Parameters
obj
- Das Objekt dessen aufzählbaren und nicht aufzählbaren Eigenschaftsnamen gesucht sind.
Beschreibung
Object.getOwnPropertyNames () gibt ein Array zurück, dessen Elemente Strings sind, die den aufzählbar und nicht aufzählbar Eigenschaften direkt auf dem Objekt gefunden werden. Die Reihenfolge der Enumerable-Objekte im Array steht im Einklang mit der Benutzung von einer exponierten Schleife for ... in
(oder durch Object.keys ()
) über die Eigenschaften des Objekts. Die Reihenfolge der nicht-aufzählbar Objekte im Array, und unter den aufzählbare Eigenschaften, ist nicht definiert.
Beispiele
Benutzung von Object.getOwnPropertyNames()
var arr = ['a', 'b', 'c']; console.log(Object.getOwnPropertyNames(arr).sort()); // logs '0,1,2,length' // Array-like object var obj = { 0: 'a', 1: 'b', 2: 'c' }; console.log(Object.getOwnPropertyNames(obj).sort()); // logs '0,1,2' // Logging property names and values using Array.forEach Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) { console.log(val + ' -> ' + obj[val]); }); // logs // 0 -> a // 1 -> b // 2 -> c // non-enumerable property var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; }, enumerable: false } }); my_obj.foo = 1; console.log(Object.getOwnPropertyNames(my_obj).sort()); // logs 'foo,getFoo'
Wenn Sie nur die aufzählbare Eigenschaften möchten, kann man die Funktion Object.keys ()
benutzen. Alternativ können auch Schlaufen for ... in
verwendet werden (dies gibt nicht nur die aufzählbaren Eigenschaften des Objektes, sondern auch entlang der Prototypkette zurück. Behoben kann diese mit der Methode hasOwnProperty ()
).
Items welche sich im Prototype chain befinden, werden nicht aufgelistet.
function ParentClass() {} ParentClass.prototype.inheritedMethod = function() {}; function ChildClass() { this.prop = 5; this.method = function() {}; } ChildClass.prototype = new ParentClass; ChildClass.prototype.prototypeMethod = function() {}; console.log( Object.getOwnPropertyNames( new ChildClass() // ['prop', 'method'] ) );
Nur unzählige Eigenschaften
Es wird die Array.prototype.filter()
Funktion benötigt um alle zählbaren Schlüssel (erhalten mit Object.keys()
) von einer Liste mit allen Schlüsseln (erhalten mit Object.getOwnPropertyNames()
) zu vergleichen, welches nur die unzähligen Eigenschaften zurück lässt.
var target = myObject; var enum_and_nonenum = Object.getOwnPropertyNames(target); var enum_only = Object.keys(target); var nonenum_only = enum_and_nonenum.filter(function(key) { var indexInEnum = enum_only.indexOf(key); if (indexInEnum == -1) { // not found in enum_only keys mean the key is non-enumerable, // so return true so we keep this in the filter return true; } else { return false; } }); console.log(nonenum_only);
Notizen
Wenn bei ES5 das Argument der Methode kein primitives Objekt ist, wird der Funktionsaufruf ein TypeError
werfen. In ES6 wird ein nicht-Objekt Argument automatisch in ein Objekt gecasted.
Object.getOwnPropertyNames('foo'); // TypeError: "foo" is not an object (ES5 code) Object.getOwnPropertyNames('foo'); // ['length', '0', '1', '2'] (ES6 code)
Spezifikationen
Specification | Status | Comment |
---|---|---|
ECMAScript 5.1 (ECMA-262) Die Definition von 'Object.getOwnPropertyNames' in dieser Spezifikation. |
Standard | Initialdefinition. Implementiert in JavaScript 1.8.5. |
ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Object.getOwnPropertyNames' in dieser Spezifikation. |
Standard |
Browser Kompatibilität
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basissupport | 5 | 4.0 (2) | 9 | 12 | 5 |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basissupport | ? | ? | ? | ? | ? | ? |
SpiderMonkey-spezifische Notizen
Vor SpiderMonkey 28 (Firefox 28 / Thunderbird 28 / SeaMonkey 2.25 / Firefox OS 1.3), ignorierte die Funktion Object.getOwnPropertyNames
unaufgelöste Eigenschaften eines Error
Objektes. Dieser Fehler wurde in den letzten Versionen behoben (Bug 724768).