Alle Prototyp-Eigenschaften eines Javascript-Objekts auflisten

Lesezeit: 1 Minute

Benutzer-Avatar
Oli Soproni B.

Gibt es eine andere Möglichkeit, nach den Prototypeigenschaften eines Javascript-Objekts zu suchen. Nehmen wir an, ich habe so etwas.

function proton() {
    this.property1 = undefined;
    this.property2 = undefined;
};

proton.prototype = {

    sample1 : function() {
        return 'something';
    },

    sample2 : function() {
        return 'something';
    }

};

var my_object = new proton();

console.log(Object.keys(my_object));

kehrt zurück [“property1”, “property2”]

console.log(Object.getOwnPropertyNames(my_object));

kehrt zurück [“property1”, “property2”]

Aber was ich drucken möchte, sind die Prototypeigenschaften des Objekts my_object.

[‘sample1’, ‘sample2’]

Damit ich die Prototypeigenschaften dieses Objekts sehen kann, muss ich console.log(object) und in den Entwicklertools nach den Eigenschaften dieses Objekts suchen.

Aber da ich Bibliotheken von Drittanbietern wie phaser.js, respond.js, create.js verwende, kenne ich die Liste der Prototypeigenschaften eines erstellten Objekts aus diesen Bibliotheken nicht.

Gibt es eine Prototypfunktion von Object, um alle Prototypeigenschaften eines Javascript-Objekts aufzulisten?

Benutzer-Avatar
Bergi

Keine Prototypmethode, aber Sie können sie verwenden Object.getPrototypeOf um die Prototypkette zu durchlaufen und dann die eigenen Eigenschaftsnamen jedes dieser Objekte zu erhalten.

function logAllProperties(obj) {
     if (obj == null) return; // recursive approach
     console.log(Object.getOwnPropertyNames(obj));
     logAllProperties(Object.getPrototypeOf(obj));
}
logAllProperties(my_object);

Damit können Sie auch eine Funktion schreiben, die Ihnen ein Array aller Eigenschaftsnamen zurückgibt:

Funktion Requisiten (obj) { var p = [];  for (; obj != null; obj = Object.getPrototypeOf(obj)) { var op = Object.getOwnPropertyNames(obj);  for (var i=0; i

  • Not a JS guru here, is there any reason why accessing __proto__ and converting it to an array is a bad idea? ex: var arr = Object.keys(my_object.__proto__).map(function (key) {return my_object.__proto__[key]});

    – Bassem

    11. Mai 2015 um 2:00 Uhr

  • @BassemDy Zum einen, .__proto__ ist genauso wie Object.getPrototypeOf aber veraltet und funktioniert in einigen Grenzfällen nicht. Außerdem erhalten Sie möglicherweise nicht alle Eigenschaften, wenn Sie nur auf eine Ebene der Prototypkette zugreifen. Übrigens scheint OP an Eigenschaftsnamen und nicht an Werten interessiert zu sein, also können Sie das weglassen .map(…)

    – Bergi

    11. Mai 2015 um 2:02 Uhr


function prototypeProperties(obj) {
  var result = [];
  for (var prop in obj) {
    if (!obj.hasOwnProperty(prop)) {
      result.push(prop);
    }
  }
  return result;
}

BEARBEITEN: Dadurch werden alle Eigenschaften erfasst, die für einen Vorfahren definiert wurden. Wenn Sie eine genauere Kontrolle darüber wünschen, was wo definiert wird, ist Bergis Vorschlag gut.

  • Beachten Sie, dass dies nur gedruckt wird aufzählbar Eigenschaften, während die akzeptierte Antwort gedruckt wird alles Eigenschaften, aufzählbar oder nicht.

    – Ohad Schneider

    29. Dezember 2016 um 13:28 Uhr

Die schnelle und schmutzige Einzeiler-Lösung wäre:

console.log(Object.getOwnPropertyNames(Object.getPrototypeOf({ prop1: 'val1' })))

Wenn Sie etwas Präziseres wollen, gehen Sie mit der akzeptierten Antwort!

1010140cookie-checkAlle Prototyp-Eigenschaften eines Javascript-Objekts auflisten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy