In JavaScript gibt es kein direktes Äquivalent zur Java-Methode „class.getName()“, um den Namen einer Objektklasse abzurufen.
ES2015-Update :
class Foo {} console.log(Foo.name); // "Foo"
Für Nicht-Klassenobjekte kann die Bezeichnung „Klasse“ mithilfe von gefunden werden 'thing.constructor.name'-Eigenschaft.
var obj = {name: "John"}; console.log(obj.constructor.name); // "Object"
Hacks und Alternativen:
Obwohl es kein natives „class.getName()“-Äquivalent gibt, gibt es welche verschiedene Hacks und alternative Methoden zum Erhalten des Klassennamens:
Object.prototype.getName() Hack (nicht empfohlen):
Dieser Hack modifiziert den Objektprototyp und fügt allen Objekten eine „getName()“-Funktion hinzu, die es ihnen ermöglicht, ihren Konstruktornamen als String zurückzugeben.
Object.prototype.getName = function() { var funcNameRegex = /function (.{1,})\(/; var results = funcNameRegex.exec(this.constructor.toString()); return results && results.length > 1 ? results[1] : ""; }; var obj = {name: "John"}; console.log(obj.getName()); // "Object"
Verwendung der Constructor-Eigenschaft (problematisch):
Jedes Objekt hat eine „Constructor“-Eigenschaft, die auf die Konstruktorfunktion verweist hat es erstellt.
var myArray = [1, 2, 3]; console.log(myArray.constructor === Array); // true
Es ist jedoch problematisch, sich auf die Eigenschaft „Konstruktor“ zu verlassen, weil:
Verwenden von „instanceof“. (auch problematisch):
Der Operator „instanceof“ kann auch zur Typprüfung verwendet werden.
var myArray = [1, 2, 3]; console.log(myArray instanceof Array); // true
Allerdings funktioniert „instanceof“ nicht für Literalwerte und bricht auch ab rahmen- und fensterübergreifend.
Verwenden Object.prototype.toString:
Object.prototype.toString gibt eine Zeichenfolgendarstellung des Objekttyps zurück.
console.log(Object.prototype.toString.call('abc')); // "[object String]" console.log(Object.prototype.toString.call(/abc/)); // "[object RegExp]"
Während dieser Ansatz Typinformationen für integrierte Typen bereitstellt, Es gibt „Objekt“ für alle benutzerdefinierten Werte zurück Typen.
Vorbehalte:
Alle oben genannten Methoden haben Einschränkungen und sind möglicherweise nicht unter allen Umständen zuverlässig. Berücksichtigen Sie die Konstruktionsmethode des Objekts, insbesondere wenn es um Vererbung und anonyme Funktionen geht.
Das obige ist der detaillierte Inhalt vonWie erhalte ich den Klassennamen eines Objekts in JavaScript?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!