Rumah >hujung hadapan web >tutorial js >Warisan JavaScript: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent() - Pendekatan Mana Yang Lebih Baik?
Nuansa Halus Warisan Javascript: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent()
Dalam Javascript, pewarisan selalunya dilaksanakan menggunakan mekanisme prototaip. Perbezaan utama antara kedua-dua pendekatan biasa ini terletak pada kesannya pada sifat proto objek kanak-kanak.
Apabila menggunakan Child.prototype = Parent.Prototype, kedua-dua prototaip anak dan induk menghala ke objek yang sama. Ini bermakna bahawa sebarang perubahan yang dibuat pada prototaip kanak-kanak juga akan mempengaruhi prototaip ibu bapa.
Walau bagaimanapun, apabila menggunakan Child.prototype = new Parent(), objek baharu dicipta yang mewarisi daripada prototaip ibu bapa. Ini memastikan bahawa prototaip kanak-kanak diasingkan daripada ibu bapa, membenarkan pengubahsuaian bebas tanpa memberi kesan kepada ibu bapa.
Kesan pada Sifat Contoh
Dalam contoh yang disediakan, isu timbul apabila menetapkan sifat contoh dalam pembina anak:
this.hitBox.width = oImg.width; this.hitBox.height = oImg.height;
Dengan Child.prototype = Parent.Prototype, sifat ini ditambah terus pada prototaip kanak-kanak, yang juga merupakan prototaip ibu bapa. Akibatnya, console.log(this) dalam pembina kanak-kanak menunjukkan proto: Kapal Angkasa kerana prototaip kini ditetapkan sebagai Kapal Angkasa.
Penyelesaian: Menggunakan Object.create
Untuk mengelakkan masalah ini, disyorkan untuk digunakan Object.create(Parent.prototype):
Spaceship.prototype = Object.create(GameObject.prototype);
Strategi ini mencipta objek baharu yang mewarisi daripada prototaip induk sambil mengekalkan prototaip bebasnya sendiri. Sifat instance yang ditambahkan pada prototaip kanak-kanak tidak akan menjejaskan ibu bapa.
Perbandingan dengan instanceof
Dalam kes menyemak pewarisan menggunakan object instanceof GameObject, adalah penting untuk ambil perhatian bahawa Child.prototype = Parent.Prototype akan gagal dalam ujian ini kerana prototaip kanak-kanak itu bukan contoh GameObject. Sebaliknya, Child.prototype = new Parent() akan lulus ujian seperti yang dijangkakan.
Pengesyoran
Untuk warisan teguh dan terpencil dalam Javascript, biasanya lebih diutamakan gunakan Child.prototype = Object.create(Parent.prototype) daripada Child.prototype = Induk.Prototaip.
Atas ialah kandungan terperinci Warisan JavaScript: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent() - Pendekatan Mana Yang Lebih Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!