Кажется, что в JavaScript (ES6) классы super.__proto__ === this.__proto__
.
Можете ли вы объяснить, почему это так? Поведение кажется одинаковым для разных браузеров, поэтому я подозреваю, что это указано где-то в спецификации.
Рассмотрим следующий код:
class Level1 {
myFunc() {
console.log('Level1');
}
}
class Level2 extends Level1 {
myFunc() {
console.log('Level2');
}
}
class Level3 extends Level2 {
myFunc() {
console.log('Level3 BEGIN ' + Math.random());
super.__proto__.myFunc();
console.log(super.__proto__ === this.__proto__);
console.log('Level3 END');
}
}
const foo = new Level3();
foo.myFunc();
Я бы ожидал, что super.__proto__.myFunc();
вызовет функцию myFunc()
класса Level1
и что super.__proto__ !== this.__proto__
. Вместо этого super.__proto__.myFunc();
фактически вызывает myFunc()
класса Level3
(он вызывает себя), а затем при втором вызове вызывает myFunc()
класса Level2
. Это вполне понятно, если super.__proto__ === this.__proto__
, который демонстрирует код.
Можете ли вы объяснить причину, по которой super.__proto__ === this.__proto__
в этом примере? Если возможно, просьба также предоставить ссылки на соответствующий раздел спецификации.