I don’t understand this behavior in javascript for inheritance I’ve always seen it defined like so :
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;
}
But in my case, these lines :
this.hitBox.width = oImg.width;
this.hitBox.height = oImg.height;
When I do a console.log(this) in my Spaceship constructor, I can see that the proto property is set to Spaceship instead of GameObject, if I remove them, it is set to GameObject.
And if I use :
Spaceship.prototype = GameObject.prototype;
I have no more problems with that. The reason that this blocks me is that I have another object with an add() method and it checks that the object inerhits of GameObject with this code :
if(object instanceof GameObject)
I don’t understand what those two lines can probably change so that inheritance is broken when they are present and I’m not sure doing inheritance the second way is good. Could someone enlighten me about this please ? 🙂
If you do
Spaceship.prototype = GameObject.prototype;Then they both refer to the same object, so you might as well have everything in
GameObject, if you add something toSpaceship.prototype, it will be added toGameObject.prototypeas well. You can easily test it by adding something toSpaceship.prototypeafter the assignment. For example, in your case you can see thatGameObject.prototype.constructoris actuallySpaceship.As for
This invokes the constructor which might have undesired side effects, you rather want to use:
Where the used
Object.createfunctionality here comes down to:Modern browsers already have the function though.