Rumah >hujung hadapan web >tutorial js >Mengapakah Mekanisme Warisan JavaScript Tidak Mengemas kini Harta Pembina Secara Automatik?

Mengapakah Mekanisme Warisan JavaScript Tidak Mengemas kini Harta Pembina Secara Automatik?

DDD
DDDasal
2024-12-04 15:07:11204semak imbas

Why Doesn't JavaScript's Inheritance Mechanism Automatically Update the Constructor Property?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn