我有以下代码:
class Polygon {
constructor() {
this.name = "Polygon";
}
}
class Rectangle {
constructor() {
this.name = "Rectangle";
}
}
class Square extends Polygon {
constructor() {
super();
}
}
Object.setPrototypeOf(Square, Rectangle);
const instance = new Square();
console.log(instance.name); // Rectangle
我的理解是:
Instance__proto__
:指向Square.prototype来继承实例方法。Subclass.__proto__
:指向Rectangle来继承静态方法和属性。Square.prototype.__proto__
:指向Polygon.prototype,用于继承父类的实例方法。
我的问题:
在上面的代码中,使用 之后Object.setPrototypeOf(Square, Rectangle)
,Square._proto_
现在所有静态属性都指向 Rectangle 而不是 Polygon。而对于继承所有其他方法,则Square.prototype._proto_
指向Polygon.prototype
。因此,我希望super()
Square 调用 Polygon 的构造函数,因为 Square 扩展了 Polygon。但是,super() 似乎调用的是 Rectangle 的构造函数。我现在很困惑,Object.setPrototypeOf(Square, Rectangle)
运行时会发生什么变化,似乎我的理解存在差距。