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()
에서 class 호출합니다 Level2
. super.__proto__ === this.__proto__
코드가 보여 주면 완벽하게 이해할 수 있습니다.
super.__proto__ === this.__proto__
이 예에서 이유를 설명 할 수 있습니까 ? 가능하면 사양의 관련 섹션에 대한 참조도 제공하십시오.
__proto__
실제로 액세서 기능Object.prototype
이고 그this
가치 에 따라 작동하는 것과 관련 이 있다고 의심했습니다 . 그러나 나는super
이것이 실제로 이런 식으로 작동하도록 지정 되었다고 상상하지 못했습니다 . 나는super
대략과 동등한 것으로 생각this.__proto__.__proto__
했기 때문에 내가 기대했던 행동을 나타내는super.__proto__
것과 동등 했을 것this.__proto__.__proto__.__proto__
입니다. 스펙에서 정확한 동작super
이 지정된 곳을 알고 있습니까?