ऐसा लगता है कि जावास्क्रिप्ट (ईएस 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
कहाँ निर्दिष्ट किया गया है?