দেখে মনে হচ্ছে জাভাস্ক্রিপ্ট (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__
এই উদাহরণের কারণ ব্যাখ্যা করতে পারেন ? যদি সম্ভব হয় তবে অনুমানের সম্পর্কিত বিভাগটিকেও সরবরাহ করুন।
__proto__
অ্যাক্সেসর ফাংশনগুলি হ'লObject.prototype
এবং তাদেরthis
মানটি চালিয়ে যাওয়ার সাথে এটির কিছু ছিল । তবে আমি কেবল এটি কল্পনা করতে পারি নি যেsuper
এইভাবে কাজ করার জন্য এটি নির্দিষ্ট করা হয়েছিল। আমি চিন্তাsuper
মোটামুটিভাবে সমতূল্য হচ্ছেthis.__proto__.__proto__
, তাইsuper.__proto__
সমতুল্য হতোthis.__proto__.__proto__.__proto__
যা আচরণ আমি আশা করেছিলাম বিকশিত হবে। আপনি কি জানেন, যেখানেsuper
নির্দিষ্ট জায়গায় সঠিক আচরণ নির্দিষ্ট করা হয়েছে?