Les 7: Objecten
Home โ€บJavaScript-track โ€บLes 7

๐Ÿ—ƒ๏ธ Objecten

โฑ Geschatte leestijd: 20 minuten ยท 7 stappen

In de vorige les leerde je arrays โ€” lijsten van waarden. Nu ga je objecten leren: sleutel-waardeparen waarmee je complexe data kunt beschrijven. Een gebruiker, een product, een bestelling โ€” bijna alles in een webapp wordt als object opgeslagen.

1 Object literal syntax

Wat is een object?

Een object is een verzameling sleutel-waardeparen tussen accolades {}. De sleutels (ook wel properties of keys) zijn strings. De waarden kunnen van elk type zijn: string, number, boolean, array, of zelfs een ander object.

Object literal
const student = {
  naam: 'Sara',
  leeftijd: 21,
  actief: true,
  vakken: ['HTML', 'CSS', 'JavaScript'],
};

console.log(student);
// { naam: 'Sara', leeftijd: 21, actief: true, vakken: [...] }

// Leeg object aanmaken en later vullen
const config = {};
config.taal = 'nl';
config.versie = 2;

2 Properties lezen en schrijven

Er zijn twee manieren om een property te lezen: puntnotatie (obj.sleutel) en haakjesnotatie (obj['sleutel']). Beide werken hetzelfde, maar haakjesnotatie is nodig als de sleutelnaam een variabele is of een spatie bevat.

Properties lezen en schrijven
const auto = {
  merk: 'Toyota',
  jaar: 2022,
  kleur: 'blauw',
};

// Lezen
console.log(auto.merk);       // Toyota
console.log(auto['jaar']);    // 2022

// Schrijven (bestaande property aanpassen)
auto.kleur = 'rood';
console.log(auto.kleur);      // rood

// Nieuwe property toevoegen
auto.km = 15000;
console.log(auto.km);         // 15000

// Dynamische sleutel via variabele
const veld = 'merk';
console.log(auto[veld]);      // Toyota

3 Object methoden

Functies als properties

Je kunt een functie opslaan als property van een object. Zo'n functie heet een methode. Je roept hem aan met object.methode(). Dit is hoe veel ingebouwde JS-methoden werken, zoals console.log().

Methoden
const rekenmachine = {
  optellen: function(a, b) {
    return a + b;
  },
  // Verkorte notatie (hetzelfde resultaat)
  aftrekken(a, b) {
    return a - b;
  },
  // Arrow function (let op: anders gedrag voor 'this')
  verdubbel: n => n * 2,
};

console.log(rekenmachine.optellen(3, 4));  // 7
console.log(rekenmachine.aftrekken(10, 3)); // 7
console.log(rekenmachine.verdubbel(5));     // 10

4 this in methoden

Wat is this?

Binnen een gewone methode verwijst this naar het object zelf. Zo kan een methode de andere properties van hetzelfde object gebruiken. Let op: in arrow functions werkt this anders โ€” gebruik voor methoden altijd de gewone function-syntax of verkorte methode-syntax.

this in methoden
const persoon = {
  naam: 'Daan',
  leeftijd: 24,
  stelVoor() {
    return 'Hoi, ik ben ' + this.naam + ' en ik ben ' + this.leeftijd + ' jaar.';
  },
  verjaar() {
    this.leeftijd += 1;
    console.log(this.naam + ' is nu ' + this.leeftijd + '!');
  },
};

console.log(persoon.stelVoor()); // Hoi, ik ben Daan en ik ben 24 jaar.
persoon.verjaar();               // Daan is nu 25!

๐Ÿ’ก Onthoud: Gebruik geen arrow function als je this nodig hebt in een methode. Arrow functions erven this van de omringende context, waardoor het onverwacht gedrag geeft.

5 Array van objecten

Het meest voorkomende patroon in echte applicaties is een array van objecten. Denk aan een lijst van producten, gebruikers of berichten. Je combineert hier alles wat je al weet: arrays, objecten, forEach, map en filter.

Array van objecten
const producten = [
  { naam: 'Laptop',    prijs: 899,  categorie: 'elektronica' },
  { naam: 'Bureau',    prijs: 249,  categorie: 'meubels' },
  { naam: 'Muis',      prijs: 29,   categorie: 'elektronica' },
  { naam: 'Stoel',     prijs: 349,  categorie: 'meubels' },
];

// forEach โ€” log elk product
producten.forEach(p => {
  console.log(p.naam + ': โ‚ฌ' + p.prijs);
});

// filter โ€” alleen elektronica
const elektronica = producten.filter(p => p.categorie === 'elektronica');
console.log(elektronica.length); // 2

// map โ€” haal alleen de namen op
const namen = producten.map(p => p.naam);
console.log(namen); // ['Laptop', 'Bureau', 'Muis', 'Stoel']

6 Oefening 1: Persoonsobject

Opdracht:

Maak een object persoon met de properties naam, leeftijd en beroep, en een methode stelVoor() die een begroeting logt met this. Roep daarna de methode aan.

โœ“ Object literal {"{"} aanwezig

โœ“ Gebruik this. in de methode

โœ“ Methode wordt aangeroepen

editor
Console output

7 Eindopdracht: Productcatalogus

Combineer alles:

Maak een array producten met 3 productobjecten (elk met naam, prijs en categorie). Gebruik forEach om alle namen en prijzen te loggen. Gebruik filter om producten onder โ‚ฌ10 te vinden. Gebruik map om 21% BTW toe te voegen aan alle prijzen (afronden op 2 decimalen).

โœ“ Array van objecten aanwezig

โœ“ forEach aanwezig

โœ“ filter aanwezig

โœ“ map aanwezig

editor
Console output
๐Ÿ“„ Volledig voorbeeld: objecten.js
// Object aanmaken
const gebruiker = {
  naam: 'Lena',
  leeftijd: 22,
  stad: 'Rotterdam',
  stelVoor() {
    return `Hoi, ik ben ${this.naam} uit ${this.stad}.`;
  },
};

console.log(gebruiker.naam);       // Lena
console.log(gebruiker['leeftijd']); // 22
console.log(gebruiker.stelVoor());  // Hoi, ik ben Lena uit Rotterdam.

// Nieuwe property toevoegen
gebruiker.beroep = 'developer';

// Array van objecten
const producten = [
  { naam: 'Koffie', prijs: 3.50,  categorie: 'dranken' },
  { naam: 'Brood',  prijs: 2.20,  categorie: 'bakkerij' },
  { naam: 'Melk',   prijs: 1.10,  categorie: 'zuivel' },
];

// forEach โ€” alle namen en prijzen
producten.forEach(p => {
  console.log(p.naam + ': โ‚ฌ' + p.prijs);
});

// filter โ€” producten onder โ‚ฌ2
const goedkoop = producten.filter(p => p.prijs < 2);
console.log('Goedkoop:', goedkoop.map(p => p.naam));

// map โ€” prijzen met 21% BTW
const metBtw = producten.map(p => ({
  ...p,
  prijs: Math.round(p.prijs * 1.21 * 100) / 100,
}));
console.log(metBtw);