重写继承模型: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中文网其他相关文章!