Ricerca…


Sintassi

  • classe BeetleGuy implementa Climbs, Bulletproof {}
  • applyMixins (BeetleGuy, [Climbs, Bulletproof]);

Parametri

Parametro Descrizione
derivedCtor La classe che si desidera utilizzare come classe di composizione
baseCtors Una serie di classi da aggiungere alla classe di composizione

Osservazioni

Ci sono tre regole da tenere a mente con i mixin:

  • Si utilizza la parola chiave implements , non la parola chiave extends quando si scrive la classe di composizione
  • È necessario disporre di una firma corrispondente per mantenere il compilatore silenzioso (ma non ha bisogno di alcuna implementazione reale - lo otterrà dal mixin).
  • Devi chiamare applyMixins con gli argomenti corretti.

Esempio di Mixins

Per creare mixin, semplicemente dichiarare classi leggere che possono essere usate come "comportamenti".

class Flies {
    fly() {
        alert('Is it a bird? Is it a plane?');
    }
}

class Climbs {
    climb() {
        alert('My spider-sense is tingling.');
    }
}

class Bulletproof {
    deflect() {
        alert('My wings are a shield of steel.');
    }
}

È quindi possibile applicare questi comportamenti a una classe di composizione:

class BeetleGuy implements Climbs, Bulletproof {
        climb: () => void;
        deflect: () => void;
}
applyMixins (BeetleGuy, [Climbs, Bulletproof]);

La funzione applyMixins è necessaria per eseguire il lavoro di composizione.

function applyMixins(derivedCtor: any, baseCtors: any[]) {
    baseCtors.forEach(baseCtor => {
        Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
             if (name !== 'constructor') {
                derivedCtor.prototype[name] = baseCtor.prototype[name];
            }
        });
    });
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow