Gibt es eine Lösung, um den Funktionsnamen eines Objekts zu erhalten?
function alertClassOrObject (o) {
window.alert(o.objectName); //"myObj" OR "myClass" as a String
}
function myClass () {
this.foo = function () {
alertClassOrObject(this);
}
}
var myObj = new myClass();
myObj.foo();
for (var k in this) {...}
- Es gibt keine Informationen über das className
oder ObjectName
. Ist es möglich, einen von ihnen zu bekommen?
javascript
TJR
quelle
quelle
Antworten:
Erhalten Sie Ihr Objekt der Konstruktor - Funktion und dann seine inspizieren Name - Eigenschaft.
Gibt "myClass" zurück.
quelle
Object
), werden Sie die den Namen des bekommen erste Glied in dieser Kette, nicht der Name des Konstrukteurs verwendet , um das Objekt zu erstellen. Nehmen Sie das folgende Beispiel :function Daddy() {}; function Me() {}; Me.prototype = new Daddy; me = new Me;
.me.constructor.name
kehrt dann unerwartet zurück'Daddy'
, nicht'Me'
.var Foo = function() {};
.> myclass=(function(){}); new myclass
Druckemyclass {}
Beispiel:
quelle
function Foo() { return {'foo':'bar'} }; var f = new Foo();
:(Wenn Sie Standard-IIFE verwenden (zum Beispiel mit TypeScript)
Sie können die Prototypen im Voraus mit Anmerkungen versehen
Verwenden Sie dann die Felder _fullname und _classname.
Anmerkungsfunktion hier:
JsFiddle
quelle
Da dies bereits beantwortet wurde, wollte ich nur auf die unterschiedlichen Ansätze beim Abrufen des Konstruktors eines Objekts in JavaScript hinweisen. Es gibt einen Unterschied zwischen dem Konstruktor und dem tatsächlichen Objekt- / Klassennamen. Wenn das Folgende die Komplexität Ihrer Entscheidung erhöht, suchen Sie vielleicht
instanceof
. Oder vielleicht sollten Sie sich fragen: "Warum mache ich das? Versucht ich das wirklich zu lösen?"Anmerkungen:
Das
obj.constructor.name
ist in älteren Browsern nicht verfügbar. Das Matching(\w+)
sollte den ES6-Stilklassen entsprechen.Code:
Ergebnis:
Code: https://jsbin.com/wikiji/edit?js,console
quelle
Ich hatte eine ähnliche Schwierigkeit und keine der hier vorgestellten Lösungen war optimal für das, woran ich arbeitete. Was ich hatte, war eine Reihe von Funktionen zum Anzeigen von Inhalten in einem Modal und ich versuchte, sie unter einer einzigen Objektdefinition umzugestalten, um die Funktionen und Methoden der Klasse zu erstellen. Das Problem trat auf, als ich feststellte, dass eine der Methoden einige Navigationsschaltflächen im Modal selbst erstellt hat, die einen onClick für eine der Funktionen verwendeten - jetzt ein Objekt der Klasse. Ich habe andere Methoden zur Behandlung dieser Navigationsschaltflächen in Betracht gezogen (und denke immer noch darüber nach), konnte jedoch den Variablennamen für die Klasse selbst finden, indem ich die im übergeordneten Fenster definierten Variablen durchsuchte. Was ich getan habe, war nach etwas zu suchen, das der 'Instanz' meiner Klasse entspricht, und falls es mehr als eine geben könnte,
quelle
Versuche dies:
quelle
Alles, was wir brauchen:
quelle