Rumah  >  Artikel  >  hujung hadapan web  >  Mengapakah `Child.prototype = Parent.prototype` Memecahkan Warisan JavaScript?

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

Barbara Streisand
Barbara Streisandasal
2024-11-19 00:55:02303semak imbas

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;

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);

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!

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