似乎在 JavaScript (ES6) Classes 中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()class的函数,Level1而super.__proto__ !== this.__proto__. 相反,super.__proto__.myFunc();实际上调用myFunc()class Level3(它调用自己),然后在第二次调用时调用myFunc()class Level2。如果super.__proto__ === this.__proto__代码演示了这一点,这是完全可以理解的。
你能解释一下super.__proto__ === this.__proto__这个例子中的原因吗?如果可能,还请提供对规范相关部分的参考。
弑天下
相关分类