重寫繼承模型:Child.prototype = Parent.Prototype 與Child.prototype = new Parent()
在JavaScript 繼承中,子物件和父物件之間的關係是透過原型鏈建立的。通常,開發人員使用 Child.prototype = new Parent() 定義繼承。然而,也存在另一種方法,Child.prototype = Parent.Prototype。本文研究了兩者之間的差異,並解釋了使用後者時出現的明顯差異。
執行差異
Child.prototype = new Parent () 建立一個新物件作為子類別(Child)的原型,並將其原型設定為父類別( Parent)。這個新建立的物件繼承了父物件的所有屬性和方法。
另一方面,Child.prototype = Parent.Prototype 不會建立新物件。相反,它只是引用父類的原型。這意味著子類別和父類別共享相同的原型對象,對其中一個類別所做的任何更改都會影響另一個。
.proto 屬性中的差異
在提供的範例中,出現差異是因為this.hitBox 行嘗試向this 物件新增屬性,在Spaceship 的情況下,該物件是新創建的原型。但是,當原型(this.hitBox)稍後指派給 GameObject.prototype 時,GameObject 的原型將會被覆寫,並且新增至 Spaceship 原型的屬性將會遺失。這就解釋了為什麼Spaceship中的this.proto屬性設定為Spaceship而不是GameObject。
推薦的繼承方法
為了繼承正常運行,建議使用Child .prototype = new Parent() 而不是 Child.prototype = Parent.Prototype。前一種方法為子類別建立一個單獨的原型對象,而後者可能會導致意外的繼承行為。
為了緩解所提供範例中的問題,可以使用 Object.create(GameObject.prototype) 來建立一個新物件作為太空船的原型。該物件將具有與 GameObject 原型相同的屬性和方法,但當 GameObject 原型修改時不會被覆寫。
以上是Child.prototype = Parent.Prototype 與 Child.prototype = new Parent():為什麼在 JavaScript 繼承中選擇一個而不是另一個?的詳細內容。更多資訊請關注PHP中文網其他相關文章!