Memahami Warisan dan Harta Pembina dalam JavaScript
Coretan kod yang disediakan menunjukkan pewarisan dalam JavaScript. Walau bagaimanapun, ia juga menimbulkan persoalan tentang sifat pembina dan pengendali contoh.
Mengapa sifat pembina tidak dikemas kini untuk b dan c?
Apabila menetapkan b.prototaip kepada new a(), objek prototaip a menjadi prototaip b. Ini tidak mengemas kini sifat pembina b, yang kekal sebagai fungsi b. Begitu juga, c mewarisi daripada b dan dengan itu juga mewarisi pembina b, yang akhirnya menunjuk kepada a.
Adakah mekanisme pewarisan rosak?
Tidak, mekanisme pewarisan adalah betul . Dalam JavaScript, sifat pembina ialah harta objek prototaip, bukan contoh itu sendiri. Apabila membuat contoh, sifat dalaman [[proto]] menunjuk kepada prototaip pembina, bukan fungsi pembina itu sendiri.
Mengemas kini sifat pembina
Kepada kemas kini harta pembina, seseorang boleh menggunakan corak berikut:
function Square(side) { if (this instanceof Square) { this.side = side; } else { return new Square(side); } }
Pemahaman instanceof
Operator instanceof tidak bergantung pada sifat pembina bagi contoh tersebut. Sebaliknya, ia menyemak sama ada rantai prototaip objek contoh mengandungi prototaip fungsi pembina. Dalam kod yang diberikan:
c.prototype = new b(); console.log(new c() instanceof c); // true
Walaupun sifat pembina bagi (c() baru) menunjuk kepada a(), instanceof menyemak rantai prototaip dan mengenal pasti dengan betul sebagai contoh c kerana rantai prototaip termasuk c.prototaip.
Kesimpulan
Warisan dalam JavaScript melibatkan menetapkan prototaip pembina terbitan kepada contoh pembina asas. Sifat pembina kekal sebagai harta objek prototaip dan pengendali instanceof menyemak rantaian prototaip untuk menentukan sama ada tika kepunyaan pembina tertentu.
Atas ialah kandungan terperinci Mengapakah Mekanisme Warisan JavaScript Tidak Mengemas kini Harta Pembina Secara Automatik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!