Opiskelen Javascript-ohjelmointia, enkä saa seuraavaa tehtävää tehdyksi. Joten kaipaisin viisaampien neuvoja. Laitan tähän tehtävänannon, sekä koodin minkä olen saanut aikaiseksi.
Tehtävä:
Käytä seuraavaa Shape-luokkaa ja luo uusi luokka nimeltä Circle, joka perii Shape-luokan. Circle-luokalla on ominaisuus nimeltä radius, ja metodi getArea().
GetArea() metodi laskee pinta-alan käyttäen seuraavaa kaavaa: 3,14159 * radius * radius. Se myös tulostaa pinta-alan konsolille. Luo ohjelman lopussa uusi Circle-olio komennolla new Circle(0,0,2) ja kutsu lopuksi getArea() -metodia tulostaaksesi pinta-alan konsolille.
class Shape { constructor (x, y) { this.x = x; this.y = y; } move(x, y) { this. x = x; this.y = y; } }
Itse tekemäni koodi:
class Shape { constructor (x, y) { this.x = x; this.y = y; } move(x, y) { this. x = x; this.y = y; } } class Circle extends Shape { constructor(radius) { super('circle'); this.radius = radius; } getArea(){ return super.getArea(); console.log(3,14159 * this.radius * this.radius) } } let circle = new Circle(0, 0 ,2); circle.getArea();
Virhe ilmoituksena tulee seuraavaa:
Uncaught: TypeError: (intermediate value).getArea is not a function
Ensinnäkin constructor(radius) on väärin, koska kuten ohjeesta käy ilmi, ympyrälle annetaan kolme arvoa (oletettavasti x, y, radius). Vastaavasti super('circle') on selkeästi väärin, koska super eli tässä tapauksessa Shape tarvitsee arvot x ja y.
Toiseksi getArea on väärin toteutettu, koska yrität siinä kutsua funktiota super.getArea (eli Shape.getArea), jota ei ole olemassa. Sinun pitäisi tuossa funktiossa yksinkertaisesti palauttaa oikean laskutoimituksen tulos, mitään superia ei siihen tarvita.
Kolmanneksi pitää muistaa, että JS:n luvuissa käytetään desimaalierottimena pistettä eikä pilkkua.
Saisitkohan näillä ohjeilla korjattua koodin?
Kiitos vinkeistä, mutta ei kyllä korjaantunut näilläkään ohjeilla toimivaksi koodiksi.
No minkälaiseen koodiin näillä vinkeillä päädyit?
Nää luokkajutut ovat olleet aina jotenkin hankalia hahmottaa. Meneeköhän se jotenkin näin sitten?
class Circle extends Shape { constructor(x, y, radius) { super(x, y); this.radius = radius; } .. ..
En oo kyllä ikinä tehnyt tämmöisiä super -juttuja eli tää koodi voi olla pielessä. Tuo on "selkäytimellä" oman logiikan mukaisesti laitettu. :) Mutta miten muutenkaan se oikeasti voisi olla?
Tuolla tapaa korjailinkin jo koodia vinkkien avulla, mutta tuo getArea-kohta tuottaa päänvaivaa...
Sain toimimaan, kiitos vinkeistä!
Aihe on jo aika vanha, joten et voi enää vastata siihen.