Javascript: Name des Objekts


phwert

Erfahrenes Mitglied
#1
Hallo,

wie bekomme ich den Namen des Objekts, das an eine Funktion übergeben wurde?

Gruß

Javascript:
<script>

    var obj = [{"A":"AAAA"}];

    var fun = function(f) {
        console.log(NAME_DES_OBJECTS(f));  // Erwartet: obj
    }

   fun(obj);

</script>
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
#2
Gar nicht, das geht nicht. Was wäre denn, wenn das Argument von gar keiner Variablen stammt, sondern nur ein Ausdruck war? Z. B. "fun({'A': 'AAAA'})".
Wozu brauchst du denn den Namen? Das klingt nach einem XY-Problem.
 

phwert

Erfahrenes Mitglied
#3
Je nach Namen soll entschieden werden, was passiert. Das kann ich natürlich auch mit einem weiteren Parameter. Aber ich wollte ein Spur von Eleganz in meiner kargen Hütte. :)
Javascript:
<script>

    var obj1...
    var obj2...
    ...
    var objn...

    var fun = function(f) {

        if (nameVon(f)=="X") ...

        else if (nameVon(f)=="Y") ...

        ...

        else ...

    }

   fun(obj1);
   fun(obj2);
    ...
   fun(objn);

</script>
 
Zuletzt bearbeitet:

Technipion

Erfahrenes Mitglied
#5
Du hast also n Objekte und möchtest je nach n unterschiedlich in deiner Funktion verfahren? Dann gib den Objekten doch einfach eine Eigenschaft "id" mit n als Wert?
 

ComFreek

Mod | @comfreek
Moderator
#6
Aber ich wollte ein Spur von Eleganz in meiner kargen Hütte. :)
Eleganz ist immer ein guter Punkt! Schön, dass du daran denkst bei deinem Code. Nur hier finde ich, dass die Nutzung eines Namens zur Auswahl, wie weiter verfahren werden soll, eher fehleranfällig und verstößt auch gegen "Principle of least astonishment - Wikipedia".

Dann gib den Objekten doch einfach eine Eigenschaft "id" mit n als Wert?
Wobei ich numerische Konstanten im Code vermeiden würde, also sowas wie "if (obj.id == 2) { do this }" vermeiden und stattdessen echte Konstanten (aka JavaScript "Enum") nutzen:
Javascript:
const VALUES = Object.freeze({VALUE_1: 1, VALUE_2: 2, ..., VALUE_N: N});

// In deiner Funktion
if (obj.value == VALUES.VALUE_1) {
  // ...
}
Natürlich sollte es weder VALUES noch VALUE_1,2,..,.N heißen! Denn sonst hast du nichts gewonnen. Da du nicht genau geschrieben hast, was dein eigentlich semantisch macht, kann dir auch keine Namen vorschlagen ;)

Im Zweifel ist aber auch diese Architektur schlecht und du möchtest eher so etwas wie Klassen und Polymorphismus (überladene Methoden) haben. Wenn du deinen genauen Anwendungsfall schilderst, können wir dir eher sagen, was die eleganteste Lösung (aus Sicht eines jeden einzelnen hier) ist.