何时在 JavaScript 继承中避免 Child.prototype = Parent.Prototype
虽然在 JavaScript 中使用 Child.prototype = 继承是常见的做法new Parent();,在某些情况下 Child.prototype = Parent.Prototype 可能会导致意外行为。
考虑以下代码片段:
function GameObject(oImg, x, y) { this.x = x; this.y = y; this.img = oImg; this.hit = new Object(); this.hitBox.x = x; this.hitBox.y = y; this.hitBox.width = oImg.width; this.hitBox.height = oImg.height; } Spaceship.prototype = new GameObject(); Spaceship.prototype.constructor = Spaceship; function Spaceship(){ console.log("instantiate ship"); GameObject.apply(this, arguments); this.vx = 0; this.vy = 0; this.speed = 3; this.friction = 0.94; }
在检查 Spaceship 构造函数时,您会发现你会注意到它的 __proto__ 属性指向 Spaceship,而不是 GameObject。这是因为以下行:
this.hitBox.width = oImg.width; this.hitBox.height = oImg.height;
直接将属性分配给 this.hitBox,而 GameObject 原型中不存在该属性。这种行为是有问题的,因为它:
为什么使用Child.prototype = new Parent() ;相反
Child.prototype = new Parent();调用 Parent 类的构造函数并将其新创建的实例分配给 Child 原型。这可以确保:
替代解决方案
在支持Object.create的现代浏览器中,您可以使用Spaceship.prototype = Object.create(GameObject.prototype);创建子原型。这在功能上等同于 Child.prototype = new Parent();但更简洁,避免了不必要的构造函数调用。
以上是什么时候应该在 JavaScript 继承中避免 `Child.prototype = Parent.Prototype`?的详细内容。更多信息请关注PHP中文网其他相关文章!