Klassen Flashcards

1
Q

Wat is een klasse?

A

Een klasse is een container die de eigenschappen en methoden van objecten beschrijft van een bepaald type. Uit een klasse worden objecten gecreëerd. We zeggen dat een object een instantie is van een bepaalde klasse.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Implementeer een klasse Circle die de eigenschap radius bezit en de methode draw bezit. De methode print enkel het woord ‘draw’ in de conole.

A

class Circle {
constructor(radius) {
this.radius = radius;
}

draw() {
console.log(‘draw’);
}
}

const c = new Circle(5);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Worden klassen gehoist?

A

Klassen worden niet gehoist. Het is dus niet mogelijk om ze te gebruiken voor hun definitie.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Klassen kunnen twee soorten methoden hebben: static methods en instance methods.

  1. Wat is het verschil tussen beiden?
  2. Wat is de use case van statische methoden?
  3. Hoe kan je een statische methode of eigenschap implementeren?
A
  1. Instantie methoden zijn methoden die beschikbaar zijn op een instantie van een klasse.

Statische methoden zijn niet beschikbaar op een instantie van een klasse maar zijn beschikbaar op de klasse zelf. Dit wilt ook zeggen dat, wanneer je de inhoud van een object in de console bekijkt, dat je geen statische methoden zal waarnemen.

  1. We gebruiken ze vaak als helperfuncties (utlity functions) bijvoorbeeld wanneer je twee objecten van dezelfde klasse met elkaar wilt vergelijken of wanneer je bijvoorbeeld wilt bijhouden hoeveel instanties er van die klasse bestaan.
  2. Je kan een statische methode of klasse implementeren door gebruik te maken van de static keyword, bijvoorbeeld:

class Circle {
static totalCircles = 0;

constructor(radius) {
Circle.totalCircles++;
this.radius = radius;
}

static someMethod() {
//do some
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Op welke twee manieren kan je private leden definiëren? Implementeer voor elk van beiden een voorbeeld.

A

Er zijn twee manieren om private leden te definiëren:
1. Door gebruik te maken van Symbols
2. Door gebruik te maken van WeakMaps

Voorbeeld 1: private members met symbols:

const _radius = Symbol();
const _draw = Symbol();

class Circle {
constructor(radius) {
this[_radius] = radius;
}

_draw {
console.log(“I’m a circle”);
}
}

Voorbeeld 2: Private members met weakMaps:

const _radius = new WeakMap();
const _move = new WeakMap();

class Circle {
constructor(radius) {
_radius.set(this, radius);

  _move.set(this, function () {
     console.log('move: ', this);
  });    }

draw() {
console.log(‘radius: ‘ + _radius.get(this));
_move.get(this).call(this);
}
}

OF:

const _privateMembers = new WeakMap();

class Circle {
constructor(radius) {
_privateMembers.set(this, {
radius,
move: function () {
console.log(‘move: ‘, this);
},
});
}

draw() {
console.log(‘radius: ‘ + _privateMembers.get(this).radius);
_privateMembers.get(this).move.call(this);
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Wat is het nadeel van het definiëren van private members als Symbols?

A

Het nadeel is dat er wel een manier bestaat om toch toegang te krijgen tot de private data. DIt kan dan als volgt:

// c is een object dat private members bevat
const symbols = Object.getOwnPropertySymbols(c);
const firstPrivateMember = symbols[0];
console.log(c[firstPrivateMember]);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Wat kan je zeggen over klassen en strict mode?

A

De body van klassen wordt automatisch uitgevoerd in strict mode.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Hoe definieer je getters en setters in klassen?

A

Door gewoonweg de set en get keywords voor de methode te plaatsen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Hoe kan je ervoor zorgen dat een klasse B de leden van klasse A overerft?

A

Doorgebruik te maken van het extends keyword:

class B extends A {
//…
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Stel dat klasse B overerft van klasse A:

  1. Geef aan hoe we de constructor van A oproepen in B
  2. Geef aan hoe we een methode dat gedefinieerd is in A oproepen in B
A
  1. In het eerste geval gebruiken we de super methode. Bijvoorbeeld:

class Shape {
constructor(color) {
this.color = color;
}
}

class Circle extends Shape {
constructor(radius, color) {
super(color);
this.radius = radius;
}
}

Het is belangrijk dat de super call gebeurt alvorens de andere eigenschappen in de constructor worden geïnitialiseerd.

  1. In het tweede geval gebruiken we het super object. Bijvoorbeeld:

class Shape {
move() {
console.log(“move”);
}
}

class Circle extends Shape {
move() {
// move methode van superklasse wordt opgeroepen
super.move();
console.log(“circle move”);
}
}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly