Mam metodę toString(), która nie jest dziedziczona z Shape. Dlaczego?

function Shape(){
  this.name = 'shape';
  this.toString = function() {return this.name;};
}

function TwoDShape(){
  this.name = '2D shape';
}

function Triangle(side, height) {
  this.name = 'Triangle';
  this.side = side;
  this.height = height;
  this.getArea = function(){return this.side * this.height / 2;};
}

TwoDShape.prototype = TwoDShape;
Triangle.prototype = Triangle;

TwoDShape.prototype.constructor = TwoDShape;
Triangle.prototype.constructor = Triangle;

var my = new Triangle(5, 10);

document.write("my getarea: " + my.getArea() + "my name is: " + my.toString()  + "<br>");​

Demo jsfiddle.

0
yossi 19 wrzesień 2012, 14:00

2 odpowiedzi

Musisz ustawić prototyp swojego odcieni do cienia, a nie do TwodShape ani trójkąta, tak jak ty.

1
Loki 19 wrzesień 2012, 10:04

Dziedziczenie prototyp powinno być SubConstructor.prototype = new ParentConstructor, a nie SubConstructor.prototype = ParentConstructor. Nie dziedziczysz prototypu poprawnie, więc nie dziedziasz metody toString; getArea nie jest metodą prototypu, ale rzeczywistą własnością każdej instancji, więc działa.

0
lanzz 19 wrzesień 2012, 10:05