JavaScript: oggetti ad inizializzazione immediata

Un modo per avere oggetti JavaScript che si inizializzano automaticamente è quello di ricorrere al pattern chiamato Immediate Object. Si tratta di un pattern che invoca direttamente il metodo di inizializzazione subito dopo la definizione dell'oggetto.


({
    
    maxwidth: 600,
    maxheight: 400,

    
    gimmeMax() {
        return `${this.maxwidth}x${this.maxheight}`;
    },

    // inizializzazione
    
    init() {
        console.log(this.gimmeMax());
    }
    
}).init();

La struttura di base serve ad eseguire operazioni dirette ma non può essere riutilizzata, in quanto una volta invocato il metodo di inizializzazione non disponete di alcun riferimento all'oggetto creato (di fatto si ottiene undefined).

Per riutilizzare questo oggetto occorre che il metodo di inizializzazione restituisca un riferimento all'oggetto, ossia this:


const obj = ({
    foo: null,
    
    bar: null,
    
    init(a, b) {
        this.foo = a;
        this.bar = b;

        return this;
    }
}).init('Test 1', 'Test 2');


console.log(obj.foo); // 'Test 1'

Torna su