Rumah >hujung hadapan web >tutorial js >Warisan JavaScript: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent() - Pendekatan Mana Yang Lebih Baik?

Warisan JavaScript: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent() - Pendekatan Mana Yang Lebih Baik?

Barbara Streisand
Barbara Streisandasal
2024-11-17 15:46:01348semak imbas

JavaScript Inheritance: Child.prototype = Parent.Prototype vs. Child.prototype = new Parent() - Which Approach is Better?

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!

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