come questo era già stato risposto, volevo solo sottolineare le differenze negli approcci per ottenere il costruttore di un oggetto in JavaScript. C'è una differenza tra il costruttore e l'oggetto/nome della classe reale. Se quanto segue aumenta la complessità della tua decisione, allora forse stai cercando instanceof
. O forse dovresti chiederti "Perché sto facendo questo? È davvero questo che sto cercando di risolvere?"
Note:
Il obj.constructor.name
non è disponibile sui browser più vecchi. Corrispondenza (\w+)
dovrebbe soddisfare le classi di stile ES6.
Codice:
var what = function(obj) {
return obj.toString().match(/ (\w+)/)[1];
};
var p;
// Normal obj with constructor.
function Entity() {}
p = new Entity();
console.log("constructor:", what(p.constructor), "name:", p.constructor.name , "class:", what(p));
// Obj with prototype overriden.
function Player() { console.warn('Player constructor called.'); }
Player.prototype = new Entity();
p = new Player();
console.log("constructor:", what(p.constructor), "name:", p.constructor.name, "class:", what(p));
// Obj with constructor property overriden.
function OtherPlayer() { console.warn('OtherPlayer constructor called.'); }
OtherPlayer.constructor = new Player();
p = new OtherPlayer();
console.log("constructor:", what(p.constructor), "name:", p.constructor.name, "class:", what(p));
// Anonymous function obj.
p = new Function("");
console.log("constructor:", what(p.constructor), "name:", p.constructor.name, "class:", what(p));
// No constructor here.
p = {};
console.log("constructor:", what(p.constructor), "name:", p.constructor.name, "class:", what(p));
// ES6 class.
class NPC {
constructor() {
}
}
p = new NPC();
console.log("constructor:", what(p.constructor), "name:", p.constructor.name , "class:", what(p));
// ES6 class extended
class Boss extends NPC {
constructor() {
super();
}
}
p = new Boss();
console.log("constructor:", what(p.constructor), "name:", p.constructor.name , "class:", what(p));
Risultato:
Codice: https://jsbin.com/wikiji/edit?js,console
Si potrebbe desiderare di vedere questo: http://stackoverflow.com/questions/789675/how-to-get-class-objects-name-as-a-string-in-javascript –
sembra giusto! Molte grazie. ci proverò! – TJR