MBO-SD : De site voor software developer in het MBO
Objecten - Functies en het this-attribute
Functies in objecten
Een object
kan in tegenstelling tot een array
ook een eigen functie hebben.
Bijvoorbeeld om punten toe te voegen aan de speler of om informatie te tonen.
Objecten en this
In onderstaande code kom je ook een nieuw concept tegen, this
. Dit is voor veel
programmeurs in het begin lastig te begrijpen en soms lijkt het een beetje op magie. Maar het is
eigenlijk heel simpel. In een object verwijst this
naar het object zelf. Omdat in het object
de variabele van het object niet gebruikt kan worden, gebruiken we this
.
Deze gebruiken we uiteraard ook in de makeObject functie
function makeObject(name, age, points) {
return {
name: name,
age: age,
points: points,
addPoint : function() { this.points = this.points + 1; }
};
}
let playerOne = makeObject("Pascal", 30, 0);
console.log(playerOne.points); //0
playerOne.addPoint();
console.log(playerOne.points); //1
playerOne.addPoint();
console.log(playerOne.points); //2
Tijdens het maken van het object weet je niet de variabele, het object wordt als waarde gebruikt om de
variabele aan te passen, en elk object heeft natuurlijk een andere variabele.
addPoint: function() { playerOne.points = playerOne.points + 1;
Gaat niet werken. Als eerste bestaat playerOne niet als variabele in de functie makeObject en als
tweede zou playerTwo (en playerThree/ Four/ Five etc.) nooit puntne krijgen.
Functies met parameters
Het kan voorkomen dat je niet maar 1 punt wilt toevoegen, maar dat dit dynamisch kan, bijvoorbeeld omdat je bij gelijkspel beide spelers 1 punt geeft en bij winst 3 punten. Dan is het niet altijd maar 1 punt maar een dynamisch getal, dat kan ook door te werken met parameters in de functie en argumenten mee te geven.
function makeObject(name, age, points) {
return {
name: name,
age: age,
points: points,
addPoint : function(points) { this.points = this.points + points; }
};
}
let playerOne = makeObject("Pascal", 30, 0);
console.log(playerOne.points); //0
playerOne.addPoint(1);
console.log(playerOne.points); //1
playerOne.addPoint(25);
console.log(playerOne.points); //26