我不明白javascript中的这种继承行为我一直看到它是这样定义的:
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;
}
但就我而言,这些行:
this.hitBox.width = oImg.width;
this.hitBox.height = oImg.height;
当我在我的 Spaceship 构造函数中执行 console.log(this) 时,我可以看到proto属性设置为 Spaceship 而不是 GameObject,如果我删除它们,它会设置为 GameObject。
如果我使用:
Spaceship.prototype = GameObject.prototype;
我没有更多的问题。这阻止我的原因是我有另一个带有 add() 方法的对象,它使用以下代码检查 GameObject 的对象是否不匹配:
if(object instanceof GameObject)
我不明白这两行可能会发生什么变化,因此当它们存在时继承会被破坏,我不确定第二种方式的继承是否很好。有人可以告诉我这个吗?:)