【发布时间】:2019-10-11 06:22:15
【问题描述】:
我有一个类,以及扩展该类的另一个类。
class Shape {
constructor() {
return this;
}
}
class Circle extends Shape {
constructor() {
super();
return this;
}
}
let foo = new Circle();
我可以得到 foo 的课程
let className = foo.constructor.name
// returns string 'Circle'
是否有可能以类似的方式获取 foo 的超类('Shape')的名称?
【问题讨论】:
-
foo.__proto__.constructor.name?我认为__proto__已经标准化了,甚至。 -
这会给你一个父类,但不一定是对象直接扩展的类,或者它最初扩展的类。
-
谢谢 Jan - 这又给了我原来的课程,但是 foo.__proto__.__proto__.constructor.name 得到了它。
-
@joelg 是的,但如果你想更进一步,你必须继续向它添加更多 proto,然后当你点击 Object 时会出现错误。您可能想重新表述有关如何获取父类的问题。假设您的课程不是最终课程,则子课程不会得到相同的结果。
-
@JanDvorak:
__proto__仅针对 Web 浏览器中的 JavaScript 引擎进行了标准化,纯粹是为了向后兼容。现代代码应该使用Object.getPrototypeOf。