Static variabelen en functies¶
Soms wil je een variabele of functie hebben die niet aan een object gekoppeld is, maar aan een klasse. Dit kan je doen door de static keyword te gebruiken. Een static variabele of functie is altijd en overal benaderbaar, zonder dat er een object van de klasse bestaat.
class MyClass {
static currentInstances: number = 0;
constructor() {
MyClass.currentInstances++;
}
}
let a = new MyClass();
let b = new MyClass();
console.log(MyClass.currentInstances); // 2
Waar kan je static variabelen en functies plaatsen?¶
Static functies en variabelen kunnen zowel binnen als buiten een klasse bestaan. Een functie of variabele buiten een klasse is in JavaScript/Typescript altijd static. Binnen een klasse moet je static functies en variabelen speciaal benoemen.
Benaderen via klassennaam, niet object¶
Als je via een klassennaam een functie of variabele probeert te benaderen, dan zal dit normaal gesproken niet werken.
De volgende code zal een fout opleveren:
class MyClass {
public myVariable: number = 0;
constructor() {
this.myVariable = 1;
}
}
// Je kan een variabele of functie van een klasse niet benaderen via de klassenaam
console.log(MyClass.myVariable); // undefined
// Alleen via een object kan je een variabele of functie benaderen
let myObject = new MyClass();
console.log(myObject.myVariable); // 1
Je moet altijd eerst een object aanmaken en dan via dit object de functie of variabele benaderen. Static functies en variabelen zijn altijd en overal benaderbaar. Het is niet nodig om eerst een object aan te maken.
class MyClass {
static myVariable: number = 0;
constructor() {
MyClass.myVariable = 1;
}
}
// Je kan een variabele of functie van een klasse benaderen via de klassenaam
console.log(MyClass.myVariable); // 1
Dit betekent ook gelijk dat een static variabele maar één waarde kan bevatten, daar waar een niet static variabele in elk object een andere waarde kan bevatten.
Static of niet static ?¶
Er hoeft geen object van een klasse te bestaan om een static functie van deze klasse aan te roepen. Om deze reden is het onmogelijk om een niet static functie of variabele van dezelfde klasse te benaderen vanuit een static functie. Andersom, een static variabele of functie benaderen vanuit een niet static functie, is altijd mogelijk.