JavaScript: una soluzione per l'inizializzazione degli oggetti: gli oggetti ad inizializzazione immediata

JavaScript: una soluzione per l'inizializzazione degli oggetti: gli oggetti ad inizializzazione immediata

Un sistema 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.

Ossia:

Another way to protect from global scope pollution, similar to the immediate functions pattern previously described, is the following immediate object initialization pattern. This pattern uses an object with an init() method, which is executed immediately after the object is created. The init() function takes care of all initialization tasks.

La forma del pattern è la seguente:


({
    
    maxwidth: 600,
    maxheight: 400,

    
    gimmeMax: function () {
        return this.maxwidth + "x" + this.maxheight;
    },

    // inizializzazione
    
    init: function () {
        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:


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

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


alert(obj.foo); // 'Test 1'

Torna su