Model Pewarisan Mengatasi: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent()
Dalam pewarisan JavaScript, hubungan antara objek kanak-kanak dan ibu bapa diwujudkan melalui rantaian prototaip. Biasanya, pembangun mentakrifkan warisan menggunakan Child.prototype = new Parent(). Walau bagaimanapun, pendekatan alternatif, Child.prototype = Parent.Prototype, juga wujud. Artikel ini mengkaji perbezaan antara kedua-duanya dan memberikan penjelasan tentang percanggahan yang ketara yang timbul apabila menggunakan yang kedua.
Perbezaan dalam Pelaksanaan
Child.prototype = new Parent () mencipta objek baharu sebagai prototaip untuk kelas anak (Kanak-kanak) dan menetapkan prototaipnya kepada kelas induk (Ibu bapa). Objek yang baru dicipta ini mewarisi semua sifat dan kaedah daripada induk.
Sebaliknya, Child.prototype = Parent.Prototype tidak mencipta objek baharu. Sebaliknya, ia hanya merujuk prototaip kelas induk. Ini bermakna kelas anak dan ibu bapa berkongsi objek prototaip yang sama dan sebarang perubahan yang dibuat pada satu akan menjejaskan yang lain.
Percanggahan dalam .proto Property
Dalam contoh yang disediakan , percanggahan timbul kerana garisan this.hitBox cuba menambah sifat pada objek ini, yang dalam kes Kapal Angkasa ialah prototaip yang baru dibuat. Walau bagaimanapun, apabila prototaip (this.hitBox) kemudiannya diperuntukkan kepada GameObject.prototype, prototaip GameObject ditimpa dan sifat-sifat yang telah ditambahkan pada prototaip Spaceship akan hilang. Ini menerangkan sebab sifat this.proto dalam Spaceship ditetapkan kepada Spaceship dan bukannya GameObject.
Kaedah Warisan Disyorkan
Agar warisan berfungsi dengan betul, disyorkan untuk menggunakan Child .prototype = new Parent() instead of Child.prototype = Parent.Prototype. Pendekatan terdahulu mencipta objek prototaip yang berasingan untuk kelas anak, manakala yang kedua boleh membawa kepada tingkah laku pewarisan yang tidak dijangka.
Untuk mengurangkan isu dalam contoh yang disediakan, seseorang boleh menggunakan Object.create(GameObject.prototype) untuk cipta objek baharu sebagai prototaip untuk Kapal Angkasa. Objek ini akan mempunyai sifat dan kaedah yang sama seperti prototaip GameObject tetapi tidak akan ditimpa apabila prototaip GameObject diubah suai.
Atas ialah kandungan terperinci Child.prototype = Parent.Prototype vs. Child.prototype = new Parent(): Mengapa Pilih Satu Daripada Yang Lain dalam Warisan JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!