Ich habe ein JavaScript-Objekt erstellt, aber wie kann ich die Klasse dieses Objekts bestimmen?
Ich möchte etwas ähnliches wie Java's .getClass()
Methode.
Ich habe ein JavaScript-Objekt erstellt, aber wie kann ich die Klasse dieses Objekts bestimmen?
Ich möchte etwas ähnliches wie Java's .getClass()
Methode.
Ich empfehle die Verwendung von Object.prototype.constructor.name
:
Object.defineProperty(Object.prototype, "getClass", {
value: function() {
return this.constructor.name;
}
});
var x = new DOMParser();
console.log(x.getClass()); // `DOMParser'
var y = new Error("");
console.log(y.getClass()); // `Error'
Javascript ist eine klassenlose Sprache: Es gibt keine Klassen, die das Verhalten einer Klasse statisch definieren wie in Java. JavaScript verwendet Prototypen anstelle von Klassen zur Definition von Objekteigenschaften, einschließlich Methoden und Vererbung. Es ist möglich, viele klassenbasierte Funktionen mit Prototypen in JavaScript zu simulieren.
Die Frage scheint bereits beantwortet zu sein, aber der Fragesteller möchte auf die Klasse eines Objekts zugreifen, genau wie wir es in Java tun, und die ausgewählte Antwort ist nicht genug (imho).
Mit der folgenden Erklärung, können wir eine Klasse eines Objekts (es ist eigentlich genannt Prototyp in Javascript) zu erhalten.
var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');
Sie können eine Eigenschaft wie diese hinzufügen:
Object.defineProperty(arr,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
Mais .last
ist nur für die Eigenschaft ' arr
Objekt, das aus dem Array-Prototyp instanziiert wird. Um also das .last
Eigenschaft für alle aus dem Array-Prototyp instanziierten Objekte verfügbar sein soll, müssen wir die .last
Eigenschaft für Array-Prototyp:
Object.defineProperty(Array.prototype,'last', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Das Problem dabei ist, dass Sie wissen müssen, welchen Objekttyp (Prototyp) die ' arr
' und ' arr2
' Variablen gehört! Mit anderen Worten: Wenn Sie den Klassentyp (Prototyp) der ' arr
' Objekt, dann können Sie keine Eigenschaft für sie definieren. Im obigen Beispiel wissen wir, dass arr eine Instanz des Array-Objekts ist, weshalb wir Array.prototype verwendet haben, um eine Eigenschaft für Array zu definieren. Aber was wäre, wenn wir die Klasse (den Prototyp) des Arrays nicht kennen würden? arr
'?
Object.defineProperty(arr.__proto__,'last2', {
get: function(){
return this[this.length -1];
}
});
console.log(arr.last) // blue
console.log(arr2.last) // orange
Wie Sie sehen können, ohne zu wissen, dass ' arr
' ein Array ist, können wir eine neue Eigenschaft hinzufügen, indem wir einfach auf die Klasse des ' arr
' durch Verwendung von ' arr.__proto__
'.
Wir haben den Prototyp des ' arr
', ohne zu wissen, dass es sich um eine Instanz von Array handelt, und ich denke, das ist es, was OP gefragt hat.
Es gibt noch eine weitere Technik, um Ihre Klasse zu identifizieren Sie können den Verweis auf Ihre Klasse in einer Instanz wie unten speichern.
class MyClass {
static myStaticProperty = 'default';
constructor() {
this.__class__ = new.target;
this.showStaticProperty = function() {
console.log(this.__class__.myStaticProperty);
}
}
}
class MyChildClass extends MyClass {
static myStaticProperty = 'custom';
}
let myClass = new MyClass();
let child = new MyChildClass();
myClass.showStaticProperty(); // default
child.showStaticProperty(); // custom
myClass.__class__ === MyClass; // true
child.__class__ === MyClass; // false
child.__class__ === MyChildClass; // true
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
15 Stimmen
Wenn ich zum Beispiel eine Person wie folgt erstelle: var p = new Person(); Ich habe ein Person-Objekt mit dem Namen "p", wie kann ich "p" verwenden, um den Klassennamen "Person" zurückzubekommen.
8 Stimmen
Duplizieren Sie
0 Stimmen
Update: Seit ECMAScript 6 hat JavaScript immer noch keine
class
Typ. Sie tut haben eineclass
Schlüsselwort undclass
Syntax zur Erstellung von Prototypen, auf die die Methoden leichter zugreifen könnensuper
.0 Stimmen
Was ist mit Object.className?
1 Stimmen
@Paul-Basenko : "className" sagt Ihnen nicht die Klasse des Objekts, sondern gibt den Inhalt der Eigenschaft "class" eines HTML-Elements zurück, die sich auf CSS-Klassen bezieht. Sie wollen auch "classList" verwenden, um sie einfach zu verwalten, aber das hat nichts mit der Frage des Autors zu tun.