Получить родительское имя класса из дочернего с ES6?
Я хотел бы получить имя родительского класса (Parent
), но я могу получить только имя дочернего класса с этим кодом (Child
)...
'use strict';
class Parent {
}
class Child extends Parent {
}
var instance = new Child();
console.log(instance.constructor.name);
Ответы
Ответ 1
ES6 классы наследуют друг от друга. Поэтому, когда instance.constructor
относится к Child
, вы можете использовать Object.getPrototypeOf(instance.constructor)
для получения Parent
, а затем получить доступ к .name
:
Object.getPrototypeOf(instance.constructor).name == "Parent";
Конечно, для этого необходимо обеспечить полное соблюдение ES6 и неминифицированный код. Вы никогда не должны полагаться на имена функций в коде.
Ответ 2
Вот что-то забавное:
class J {}
class K extends J {}
class L extends K {}
function getBaseClass(targetClass){
if(targetClass instanceof Function){
let baseClass = targetClass;
while (baseClass){
const newBaseClass = Object.getPrototypeOf(baseClass);
if(newBaseClass && newBaseClass !== Object && newBaseClass.name){
baseClass = newBaseClass;
}else{
break;
}
}
return baseClass;
}
}
console.log(getBaseClass(L)); // Will return J.
Ответ 3
Вы можете технически сделать
// instanceProto === Child.prototype
var instanceProto = Object.getPrototypeOf(instance);
// parentProto === Parent.prototype
var parentProto = Object.getPrototypeOf(instanceProto);
console.log(parentProto.constructor.name);
Имейте в виду, что эти имена заставляют все искажать minifiers.