Objektorienteret programmering
Klasser og objekter
En klasse defineres med ordet class og indeholder en constructor, der sætter objektets felter, samt de metoder, objektet kan. Du laver et objekt med new, og inde i klassen henviser this til netop det objekt, metoden blev kaldt på.
Forudsætter, at du har set objektorienteret programmering .
Anatomien
class Studerende {
constructor(navn, linje) {
this.navn = navn;
this.linje = linje;
this.karakterer = [];
}
tilfoejKarakter(karakter) {
this.karakterer.push(karakter);
}
gennemsnit() {
if (this.karakterer.length === 0) {
return 0;
}
const sum = this.karakterer.reduce((a, b) => a + b, 0);
return sum / this.karakterer.length;
}
}
const ida = new Studerende("Ida", "HA(it.)");
ida.tilfoejKarakter(10);
ida.tilfoejKarakter(7);
console.log(ida.navn);
console.log(ida.gennemsnit()); Output
Tryk på “Kør koden”.
Fire ting at lægge mærke til:
constructorkaldes automatisk, når du skrivernew. Det er der, felterne bliver sat. Der kan kun være én.thispeger på det objekt, der er ved at blive lavet, eller som metoden blev kaldt på.- Metoder skrives uden ordet
functionog uden komma imellem. - Felter behøver ikke komme udefra.
this.karakterer = []giver hvert objekt sin egen tomme liste.
new laver et nyt eksemplar hver gang
class Taeller {
constructor() {
this.antal = 0;
}
tael() {
this.antal = this.antal + 1;
return this.antal;
}
}
const a = new Taeller();
const b = new Taeller();
a.tael();
a.tael();
b.tael();
console.log(a.antal);
console.log(b.antal); Output
Tryk på “Kør koden”.
To objekter, to uafhængige tællere. Det er hele forskellen på at bruge klasser og at have én global variabel.
this er det hyppigste problem
this peger på det objekt, metoden blev kaldt på, men kun hvis den bliver kaldt
som en metode.
class Ur {
constructor() {
this.tid = 0;
}
tik() {
this.tid = this.tid + 1;
console.log(this.tid);
}
}
const ur = new Ur();
ur.tik();
const loesrevet = ur.tik; Output
Tryk på “Kør koden”.
Kalder du loesrevet(), mister funktionen sin forbindelse til objektet, og
this er ikke længere uret. Det sker typisk, når en metode sendes med som
kaldbagfunktion til addEventListener. Løsningen er en arrow function udenom:
knap.addEventListener("click", () => ur.tik());
Statiske metoder
En metode med static hører til klassen, ikke til det enkelte objekt. Den bruges
til hjælpefunktioner, der ikke har brug for this.
class Matematik {
static kvadrat(x) {
return x * x;
}
}
console.log(Matematik.kvadrat(6)); Output
Tryk på “Kør koden”.
Fra objektliteral til klasse
Du kunne skrive det samme med et almindeligt objekt. Forskellen viser sig, når du skal bruge mange af dem: med et objektliteral skriver du hele formen igen for hver, og der er intet, der sikrer, at de har de samme felter. Klassen er ét sted at rette, når formen ændrer sig.
Kort opsamling
constructorsætter felterne,newlaver eksemplaret.thiser det objekt, metoden blev kaldt på.- Hvert objekt har sine egne værdier.
- Mister du
this, er metoden blevet kaldt løsrevet fra sit objekt.
Øv dig
Læs videre
- Objektorienteret programmering Objektorienteret programmering forklaret på dansk. Hvad klasser og objekter er, hvorfor man gør det, og de fire begreber du bliver spurgt om til eksamen.
- Arv Arv i objektorienteret programmering forklaret på dansk: extends, super og overskrivning af metoder. Med eksempler og en advarsel om for dybe hierarkier.
- Objekter Objekter i JavaScript forklaret på dansk: nøgler og værdier, punktnotation, indlejrede objekter og arrays af objekter. Med eksempler du kan køre.
Senest gennemgået .