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 }