Karena ini sudah dijawab, saya hanya ingin menunjukkan perbedaan dalam pendekatan untuk mendapatkan konstruktor dari objek dalam JavaScript. Ada perbedaan antara konstruktor dan objek / nama kelas yang sebenarnya. Jika yang berikut menambah kompleksitas keputusan Anda, mungkin Anda sedang mencari instanceof. Atau mungkin Anda harus bertanya pada diri sendiri, "Mengapa saya melakukan ini? Apakah ini benar-benar yang saya coba selesaikan?"
Catatan:
Tidak obj.constructor.nametersedia di browser lama. Pencocokan (\w+)harus memenuhi kelas gaya ES6.
Kode:
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));
Hasil:

Kode: https://jsbin.com/wikiji/edit?js,console