joe*_*elg 11 javascript ecmascript-6
我有一个类,另一个类扩展了该类.
class Shape {
constructor() {
return this;
}
}
class Circle extends Shape {
constructor() {
super();
return this;
}
}
let foo = new Circle();
Run Code Online (Sandbox Code Playgroud)
我可以和foo一起上课
let className = foo.constructor.name
// returns string 'Circle'
Run Code Online (Sandbox Code Playgroud)
是否有可能以类似的方式获得foo的超类('Shape')的名称?
小智 15
Object.getPrototypeOf(Object.getPrototypeOf(foo)).constructor.name;
Run Code Online (Sandbox Code Playgroud)
知道了:
let superClassName = foo.__proto__.__proto__.constructor.name
// return Shape
Run Code Online (Sandbox Code Playgroud)
编辑:这将返回父类,它不一定是最初扩展的类 Circle。在我的用例中,它们是相同的,但此处“超类”的含义存在微妙的歧义。
jos*_*ike -3
您的最终超类始终是 Object,因此尝试派生它是没有意义的。您需要使用“is”关键字来探测相关实例是否是其他实例的实例。我是从 Actionscript-3 的角度写这篇文章的,所以我不确定 ES-6 中的语法到底是什么,但它应该遵循“if (this is Shape)”的思路。如果相关实例扩展了您正在讨论的类,则返回 true,否则返回 false。
然而,您要问的是 Shape 从标准库或标准对象中分支出来,编译器或运行时无法弄清楚这一点。理论上,如果 ECMA 语言能够为给定类提供向后继承数组,那就太好了,但据我所知,这不是也从来不是一个功能。如果没有完整的继承链,您需要知道您正在寻找什么超类,否则您无法以任何逻辑方式派生它。
| 归档时间: |
|
| 查看次数: |
4083 次 |
| 最近记录: |