Waarom zijn objects zo belangrijk?
In JavaScript is bijna alles een object. Als je objects begrijpt, begrijp je een groot deel van de taal.
Wat is een object?
In het echte leven kun je een auto zien als een object.
Een auto heeft eigenschappen (properties):
- kleur
- gewicht
- model
- merk
En functionaliteiten (methods):
- starten
- rijden
- remmen
- stoppen
Elke auto heeft dezelfde soort properties en methods, maar met andere waardes.
Auto 1: Fiat 500, rood, 850kg → start(), drive(), brake(), stop()
Auto 2: BMW X7, zwart, 1350kg → start(), drive(), brake(), stop()
Auto 3: Volvo S60, grijs, 1200kg → start(), drive(), brake(), stop()
Een object heeft dus:
- properties (eigenschappen) – info over het object
- methods (functies) – wat het object kan doen
Object maken
Een leeg object maak je met accolades:
const car = {};
Auto voorbeeld uitgewerkt:
const car = {
// Properties
name: 'Fiat',
model: '500',
weight: '850kg',
color: 'white',
// Methods
start() {
return 'I start the car';
},
drive() {
return "I'm driving";
},
brake() {
return 'I brake';
},
stop() {
return 'I stop';
}
};
Zonder en met object
Zonder object:
let car_name = "Fiat";
let model = "500";
let weight = "850kg";
let color = "white";
function drive() {
return "I'm driving";
}
Met object (alles bij elkaar):
const car = {
name: "Fiat",
model: "500",
weight: "850kg",
color: "white",
drive() {
return "I'm driving";
}
};
Voordelen:
- alles wat bij elkaar hoort staat bij elkaar
- overzichtelijker en logischer
- makkelijk hergebruiken
Properties ophalen
Meest gebruikte manier: dot notatie.
console.log(car.name); // "Fiat"
console.log(car.model); // "500"
console.log(car.weight); // "850kg"
console.log(car.color); // "white"
Bracket notation
Alternatief met vierkante haken:
console.log(car['name']); // "Fiat"
console.log(car['model']); // "500"
const prop = 'name';
console.log(car[prop]); // "Fiat"
- dot notatie:
car.name– standaard, kort en leesbaar - bracket notatie:
car['name']– handig bij variabele property naam
Methods uitvoeren
Een method is een functie binnen een object. Om die uit te voeren heb je haakjes nodig.
console.log(car.drive()); // "I'm driving"
console.log(car.start()); // "I start the car"
Let op het verschil:
console.log(car.drive); // toont de functie zelf
console.log(car.drive()); // voert de functie uit
Object data tonen in de pagina
HTML:
<div class="output"></div>
JavaScript:
const output = document.querySelector('.output');
output.innerHTML = `
<h1>Naam van de auto is: ${car.name}</h1>
<p>Model: ${car.model}</p>
<p>Kleur: ${car.color}</p>
<p>${car.drive()}</p>
`;
innerHTML laat je HTML en variabelen combineren met template literals (backticks).
Arrays in objects
Een property kan ook een array zijn.
const car = {
name: 'Fiat',
model: '500',
weight: '850kg',
color: 'white',
repairs: ['koppeling', 'banden', 'distributieriem'],
start() {
return 'I start the car';
},
drive() {
return "I'm driving";
}
};
Elementen uit de array
console.log(car.repairs[0]); // "koppeling"
console.log(car.repairs[1]); // "banden"
console.log(car.repairs[2]); // "distributieriem"
const laatste = car.repairs[car.repairs.length - 1];
console.log(laatste); // "distributieriem"
Loopen en methods
for (const repair of car.repairs) {
console.log(repair);
}
// item toevoegen
car.repairs.push('uitlaat');
// checken
console.log(car.repairs.includes('banden')); // true
console.log(car.repairs.length); // aantal reparaties
Properties wijzigen
Waarde aanpassen
car.name = 'Seat';
console.log(car.name); // "Seat"
Nieuwe property toevoegen
car.year = 2020;
console.log(car.year); // 2020
Property verwijderen
delete car.color;
console.log(car.color); // undefined
Voorbeeld met gebruiker:
const gebruiker = {
naam: 'Jan',
email: 'jan@email.com',
rol: 'gebruiker'
};
gebruiker.rol = 'admin';
gebruiker.lastLogin = new Date();
delete gebruiker.email;
console.log(gebruiker);
this keyword
Binnen een method verwijst this naar het object zelf.
Eenvoudig voorbeeld
const car = {
name: 'Fiat',
rename() {
this.name = 'Lambo';
return this.name;
}
};
console.log(car.rename()); // "Lambo"
console.log(car.name); // "Lambo"
Met parameter
const car = {
name: 'Fiat',
rename(newName) {
this.name = newName;
return this.name;
}
};
car.rename('Ferrari');
console.log(car.name); // "Ferrari"
Voorbeeld met state
const car = {
name: 'Fiat',
speed: 0,
accelerate(amount) {
this.speed += amount;
return `${this.name} rijdt nu ${this.speed} km/h`;
},
brake(amount) {
this.speed -= amount;
if (this.speed < 0) this.speed = 0;
return `${this.name} rijdt nu ${this.speed} km/h`;
}
};
Zonder this wijzig je geen property van het object, maar maak je een losse variabele.
Bestaande JavaScript objects
Je gebruikt al vaker objects zonder dat je het doorhebt.
console
console.log('Hello');
- console = object
- log() = method
document
document.querySelector('.myClass');
- document = object
- querySelector() = method
Math
Math.random();
- Math = object
- random() = method die een random getal maakt
Andere voorbeelden
const text = "Hello";
text.toUpperCase(); // string object met method
const numbers = [1, 2, 3];
numbers.push(4); // array object met method
const now = new Date();
now.getFullYear(); // date object met method
Veelgemaakte fouten
1. Haakjes vergeten bij methods
// fout
car.drive;
// goed
car.drive();
2. this vergeten
// fout
const car = {
name: 'Fiat',
rename(newName) {
name = newName;
}
};
// goed
const car2 = {
name: 'Fiat',
rename(newName) {
this.name = newName;
}
};
3. Komma's vergeten
// fout
const car = {
name: 'Fiat'
model: '500'
};
// goed
const carGood = {
name: 'Fiat',
model: '500'
};
Objects vormen de basis van veel JavaScript code. Hoe beter je dit snapt, hoe makkelijker de rest wordt.