[JavaScript] get property names of Object

Piktogramm

Fleet Admiral
Registriert
Okt. 2008
Beiträge
10.135
Moin,
ich hätte gern von einem frisch initialisiertem Objekt herausgefunden, welcher Methoden bzw. genauer Setter dieses Objekt implementiert. An sich gingen auch die Namen der Properties. Gesucht ist also das "?". Mit deklarierten Object.properties geht das recht problemlos, bei schlicht initialisierten Objekten hingegen gelingt es mir nicht.

Code:
var foo {
    adam: "m",
    eve: "f",
    set setadm(setadam){
        this.adam = setadam;
    },
    set seteve(seteve){
        this.eve = seteve;
    }
}

function fun(){
    var bar = Object.create(foo);

    var setternames = ?;

    for(let i = 0; setternames.length > i ; i++){
        console.log(setternames[i]);
    }
}

setternames sollte am Schluss also ein Array bzw. Objekt sein, welches 2 Einträge enthält (setadam & seteve). Alternativ wären auch "adam" & "eve" akzeptabel.

Bevorzugt werden Lösungen, die mit nackigem JS auskommen.
 
Zuletzt bearbeitet:
Javascript:
function isSetter(obj, property) {
  if (!(property in obj)) {
    return false;
  }

  let objOrPrototype = obj;

  while (!objOrPrototype.hasOwnProperty(property)) {
    objOrPrototype = Object.getPrototypeOf(objOrPrototype);
  }

  const descriptor = Object.getOwnPropertyDescriptor(objOrPrototype, property);

  if (descriptor == undefined) {
    throw new Error('could not get property descriptor');
  }

  return (descriptor.set != undefined);
}

var foo = {
  adam: "m",
  eve: "f",
  set setadm(setadam) {
    this.adam = setadam;
  },
  set seteve(seteve) {
    this.eve = seteve;
  }
};

var bar = Object.create(foo);

let setters = [];
for (const property in bar) {
  if (isSetter(bar, property)) {
    setters.push(property);
  }
}

console.log(setters);
 
  • Gefällt mir
Reaktionen: Hayda Ministral, Piktogramm und new Account()
Ich danke dir und ich fühle mich gerade etwas dumm :D
Wobei "function isSetter()" nicht auf Setter prüft und damit der Name nicht ganz richtig ist, aber es taugt!
 
Worauf prüft es denn dann?
 
  • Gefällt mir
Reaktionen: new Account()
Stimmt, es schmeißt die setter auf die console. Ich muss ins Bett :) Nochmal danke und entschuldige bitte mein müdes Hirn.
 
Zurück
Oben