I would like to get the parent class name (Parent), but I\'m only able to retrieve the child class name with this code (Child)...
From proto property:
Child['__proto__'].name
example here: https://stackblitz.com/edit/typescript-s5brk9
You could technically do
// instanceProto === Child.prototype
var instanceProto = Object.getPrototypeOf(instance);
// parentProto === Parent.prototype
var parentProto = Object.getPrototypeOf(instanceProto);
console.log(parentProto.constructor.name);
keep in mind that these names may all be mangled by minifiers.
ES6 classes inherit from each other. So when instance.constructor refers to the Child, then you can use Object.getPrototypeOf(instance.constructor) to get the Parent, and then access .name:
Object.getPrototypeOf(instance.constructor).name // == "Parent"
Of course, full ES6 compliance and non-minified code are necessary for this to work. You should never rely on function names in code.
Here is something amusing:
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.