Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

Object.getOwnPropertyNames()

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).

Siehe auch

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
 Mitwirkende an dieser Seite: janbiasi
 Zuletzt aktualisiert von: janbiasi,