ऐसा लगता है कि जावास्क्रिप्ट (ईएस 6) कक्षाओं में 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__इस उदाहरण में इसका कारण बता सकते हैं ? यदि संभव हो, तो कृपया संबंधित अनुभाग के संदर्भ भी प्रदान करें।
__proto__वास्तव में एक्सेसरी फ़ंक्शंस होनेObject.prototypeऔर उनकेthisमूल्य पर काम करने के लिए कुछ करना था । लेकिन मैंने अभी कल्पना नहीं कीsuperथी कि वास्तव में इस तरह से काम करने के लिए निर्दिष्ट किया गया था। मैंनेsuperलगभगthis.__proto__.__proto__उसी के समतुल्य होने के बारे में सोचा था , इसलिए मेरेsuper.__proto__समकक्ष वहthis.__proto__.__proto__.__proto__व्यवहार प्रदर्शित होगा जिसकी मुझे अपेक्षा थी। क्या आप जानते हैं, कल्पना में सटीक व्यवहारsuperकहाँ निर्दिष्ट किया गया है?