Poznajemy class expression w JavaScript i jego różne możliwe zastosowania. Do dzieła.
Rzecz pierwsza – oplatanie klasy w ten sposób:
const Person = class {
constructor(name, age){
this.name = name;
this.age = age;
}
}
let john = new Person("John", 30);
console.log(john);
//Object { name: "John", age: 30 }
Generalnie może to służyć uzyskaniu prywatnych wartości (które swoją drogą zostały dodane do JS, zaczynają się od znaku #) albo innym celom.
Jest to jak najbardziej możliwe i w potencjalnym użyciu pod person mamy funkcję, która ma w swoim zasięgu jakiś WeakSet albo WeakMap czemuś służący, zaś pod returnem class expression, które ma dostęp poprzez domknięcie do tamtych zmiennych.
Ok, teraz klasa nazwana:
const Person = class NamedPerson {
constructor(name, age){
this.name = name;
this.age = age;
}
}
let john = new Person("John", 30);
console.log(john);
//Object { name: "John", age: 30 }
console.log(Person.name);
//NamedPerson
Niewielki pożytek z tego, ale zawsze. Ok, teraz anonimowy obiekt:
let john = new class {
constructor(name, age){
this.name = name;
this.age = age;
}
}("John", 30);
console.log(john);
//Object { name: "John", age: 30 }
Poza kilkoma przykładami z WeakMap i WeakSet niewiele jest realnych zastosowań klas anonimowych, ale warto znać język, którym się posługujemy.
Ciekawa funkcja tworząca obiekt z klasy anonimowej:
function createInstance(cls, ...args){
return new cls(...args);
}
let john = createInstance(class {
constructor(name, age){
this.name = name;
this.age = age;
}
}, "John", 33);
console.log(john);
//Object { name: "John", age: 33 }