No entiendo este comportamiento en javascript para la herencia siempre he visto que define de este modo:¿Por qué no debería usar Child.prototype = Parent.Prototype en lugar de Child.prototype = new Parent(); para la herencia de 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;
}
Pero en mi caso, estas líneas:
this.hitBox.width = oImg.width;
this.hitBox.height = oImg.height;
Cuando hago una consola .log (esto) en mi constructor de Nave Espacial, puedo ver que la propiedad proto está configurada como Nave Espacial en lugar de GameObject, si las elimino, se configura como GameObject.
Y si uso:
Spaceship.prototype = GameObject.prototype;
no tengo más problemas con eso. La razón de que esto bloquea mí es que tengo otro objeto con un método add() y comprueba que el objeto de inerhits GameObject con este código:
if(object instanceof GameObject)
que no entienden lo que esas dos líneas, probablemente, puede cambiar para que la herencia se rompa cuando están presentes y no estoy seguro de hacer herencia, la segunda forma es buena. ¿Podría alguien aclararme sobre esto por favor? :)
Tenga en cuenta que 'instanceof' es una mala práctica, si puede evitar usarlo, probablemente debería. – Jasper
@Jasper: ¿Por qué? – Bergi
@Bergi No es un uso apropiado del polimorfismo y puede causar problemas cuando se agregan más clases a su árbol de herencia. En otras palabras, 'instanceof' generalmente no se combina muy bien con el principio Abierto/Cerrado. – Jasper