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.
getClass()
Funktion über constructor.prototype.nameIch habe einen Weg gefunden, auf die class
die viel sauberer ist als einige der obigen Lösungen; hier ist sie.
function getClass(obj) {
// if the type is not an object return the type
if((let type = typeof obj) !== 'object') return type;
//otherwise, access the class using obj.constructor.name
else return obj.constructor.name;
}
hat der Konstruktor eine Eigenschaft namens name
zugreifen, um den Klassennamen zu erhalten.
sauberere Version des Codes:
function getClass(obj) {
// if the type is not an object return the type
let type = typeof obj
if((type !== 'object')) {
return type;
} else { //otherwise, access the class using obj.constructor.name
return obj.constructor.name;
}
}
Ich finde object.constructor.toString()
return [object objectClass]
im IE, anstatt function objectClass () {}
in Chome zurück. Ich denke also, dass der Code in http://blog.magnetiq.com/post/514962277/finding-out-class-names-of-javascript-objects funktioniert möglicherweise nicht gut im IE, und ich habe den Code wie folgt geändert:
var getObjectClass = function (obj) {
if (obj && obj.constructor && obj.constructor.toString()) {
/*
* for browsers which have name property in the constructor
* of the object,such as chrome
*/
if(obj.constructor.name) {
return obj.constructor.name;
}
var str = obj.constructor.toString();
/*
* executed if the return of object.constructor.toString() is
* "[object objectClass]"
*/
if(str.charAt(0) == '[')
{
var arr = str.match(/\[\w+\s*(\w+)\]/);
} else {
/*
* executed if the return of object.constructor.toString() is
* "function objectClass () {}"
* for IE Firefox
*/
var arr = str.match(/function\s*(\w+)/);
}
if (arr && arr.length == 2) {
return arr[1];
}
}
return undefined;
};
getClass()
y getInstance()
Sie können eine Referenz für die Klasse eines Objekts erhalten, indem Sie this.constructor
.
function A() {
this.getClass = function() {
return this.constructor;
}
this.getNewInstance = function() {
return new this.constructor;
}
}
var a = new A();
console.log(a.getClass()); // function A { // etc... }
// you can even:
var b = new (a.getClass());
console.log(b instanceof A); // true
var c = a.getNewInstance();
console.log(c instanceof A); // true
function A() {};
A.getClass = function() {
return this;
}
A.getInstance() {
return new this;
}
Zustimmen mit dfa, das ist, warum ich den Prototye als die Klasse betrachten, wenn keine benannte Klasse gefunden
Hier ist eine verbesserte Funktion der von Eli Grey geposteten Funktion, die meiner Denkweise entspricht
function what(obj){
if(typeof(obj)==="undefined")return "undefined";
if(obj===null)return "Null";
var res = Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1];
if(res==="Object"){
res = obj.constructor.name;
if(typeof(res)!='string' || res.length==0){
if(obj instanceof jQuery)return "jQuery";// jQuery build stranges Objects
if(obj instanceof Array)return "Array";// Array prototype is very sneaky
return "Object";
}
}
return res;
}
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.