私は常に次のように定義されているのを見てきた継承のための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プロパティが GameObject ではなく Spaceship に設定されていることがわかります。それらを削除すると、GameObject に設定されます。
そして、私が使用する場合:
Spaceship.prototype = GameObject.prototype;
私はそれでもう問題はありません。これが私をブロックする理由は、 add() メソッドを持つ別のオブジェクトがあり、オブジェクトが次のコードで GameObject の inerhis をチェックするためです:
if(object instanceof GameObject)
これらの 2 つの行がおそらく変更される可能性があるため、それらが存在するときに継承が壊れる可能性があることを理解していません。誰かがこれについて私に教えてもらえますか? :)