Nie rozumiem tego zachowania w JavaScript do dziedziczenia Zawsze widać to zdefiniowane tak:Dlaczego nie miałbym używać Child.prototype = Parent.Prototype zamiast Child.prototype = new Parent(); dla dziedziczenia 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;
}
Ale w moim przypadku te linie:
this.hitBox.width = oImg.width;
this.hitBox.height = oImg.height;
Kiedy zrobić konsolę .log (this) w moim konstruktorze Spaceship, widzę, że właściwość jest ustawiona na Spaceship zamiast GameObject, jeśli je usunę, zostanie ustawiona na GameObject.
A jeśli używam:
Spaceship.prototype = GameObject.prototype;
mam żadnych problemów z tym. Powodem tego, że bloki mnie to, że mam inny obiekt z metody add() i sprawdza, że inerhits Przedmiot GameObject z tym kodem:
if(object instanceof GameObject)
Nie rozumiem, co te dwie linie mogą prawdopodobnie zmiana tak, że dziedzictwo jest zerwane, gdy są obecne i nie jestem pewien, czy po dziedziczeniu druga droga jest dobra. Czy ktoś mógłby mnie o tym poinformować? :)
Zwróć uwagę, że 'instanceof' jest złą praktyką, jeśli możesz tego uniknąć, prawdopodobnie powinieneś. – Jasper
@Jasper: Dlaczego? – Bergi
@Bergi Nie jest właściwe użycie polimorfizmu i może powodować problemy, gdy więcej klas zostanie dodanych do twojego drzewa dziedziczenia. Innymi słowy, 'instanceof' zazwyczaj nie miesza się bardzo dobrze z zasadą Open/Closed. – Jasper