Swa*_*don 23 javascript ecmascript-6
我想获取父类名称(Parent),但我只能使用此代码检索子类名称(Child)...
'use strict';
class Parent {
}
class Child extends Parent {
}
var instance = new Child();
console.log(instance.constructor.name);Run Code Online (Sandbox Code Playgroud)
可能吗 ?
谢谢 !
Ber*_*rgi 37
ES6类相互继承.所以当instance.constructor引用时Child,则可以使用Object.getPrototypeOf(instance.constructor)获取Parent,然后访问.name:
Object.getPrototypeOf(instance.constructor).name == "Parent";
Run Code Online (Sandbox Code Playgroud)
当然,完整的ES6合规性和非缩小代码是必不可少的.你不应该依赖代码中的函数名.
你可以在技术上做到
// instanceProto === Child.prototype
var instanceProto = Object.getPrototypeOf(instance);
// parentProto === Parent.prototype
var parentProto = Object.getPrototypeOf(instanceProto);
console.log(parentProto.constructor.name);
Run Code Online (Sandbox Code Playgroud)
请记住,这些名称可能都被压缩器破坏了。
这里有一些有趣的事情:
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.Run Code Online (Sandbox Code Playgroud)