為什麼 Child.prototype = Parent.Prototype 可能會破壞 Javascript 繼承?
在Javascript 繼承中,您可能遇到以下繼承模式:
function GameObject(oImg, x, y) { // GameObject constructor } Spaceship.prototype = new GameObject(); Spaceship.prototype.constructor = Spaceship;
但是,在繼承後向Spaceship.prototype 新增屬性時,您可能已經注意到意外的行為。 Spaceship 的原型屬性設定為 Spaceship 而不是 GameObject。
出現這種情況是因為當您設定 Spaceship.prototype = GameObject.prototype 時,兩個原型開始引用同一個物件。對一個物件的任何修改都會影響另一個物件。因此,向 Spaceship.prototype 新增屬性也會將它們新增至 GameObject.prototype。
要避免此問題,您可以使用:
Spaceship.prototype = Object.create(GameObject.prototype);
這會使用GameObject.prototype 建立一個新物件作為其原型,確保對Spaceship.prototype 的修改不會影響GameObject. prototype。
或者,如果您想呼叫建構函數,請在 Spaceship 建構函數中使用 GameObject.apply(this,arguments) 而不是上面的行。
以上是為什麼 `Child.prototype = Parent.prototype` 會破壞 JavaScript 繼承?的詳細內容。更多資訊請關注PHP中文網其他相關文章!