Mengapakah `Child.prototype = Parent.prototype` Memecahkan Warisan JavaScript?

Barbara Streisand
Lepaskan: 2024-11-19 00:55:02
asal
309 orang telah melayarinya

Why Does `Child.prototype = Parent.prototype` Break JavaScript Inheritance?

Mengapa Child.prototype = Parent.Prototype Mungkin Memecahkan Warisan Javascript?

Dalam pewarisan Javascript, anda mungkin pernah menemui corak pewarisan berikut :

function GameObject(oImg, x, y) {
    // GameObject constructor
}

Spaceship.prototype = new GameObject();
Spaceship.prototype.constructor = Spaceship;
Salin selepas log masuk

Walau bagaimanapun, anda mungkin perasan gelagat yang tidak dijangka apabila menambahkan sifat pada Spaceship.prototaip selepas warisan. Sifat prototaip Spaceship akan ditetapkan kepada Spaceship dan bukannya GameObject.

Ini berlaku kerana apabila anda menetapkan Spaceship.prototype = GameObject.prototype, kedua-dua prototaip mula merujuk kepada objek yang sama. Sebarang pengubahsuaian pada satu objek akan menjejaskan yang lain. Oleh itu, menambahkan sifat pada Spaceship.prototype juga akan menambahkannya pada GameObject.prototype.

Untuk mengelakkan isu ini, anda boleh menggunakan:

Spaceship.prototype = Object.create(GameObject.prototype);
Salin selepas log masuk

Ini mencipta objek baharu dengan GameObject.prototype sebagai prototaipnya, memastikan pengubahsuaian kepada Spaceship.prototype tidak akan menjejaskan GameObject.prototype.

Sebagai alternatif, jika anda ingin menggunakan pembina, gunakan GameObject.apply(this, arguments) dalam pembina Spaceship dan bukannya baris di atas.

Atas ialah kandungan terperinci Mengapakah `Child.prototype = Parent.prototype` Memecahkan Warisan JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan