Recherche…


Syntaxe

  • classe BeetleGuy implémente Climbs, Bulletproof {}
  • appliquerMixines (BeetleGuy, [Climbs, Bulletproof]);

Paramètres

Paramètre La description
dérivéCtor La classe que vous souhaitez utiliser comme classe de composition
baseCtors Un tableau de classes à ajouter à la classe de composition

Remarques

Il y a trois règles à prendre en compte avec les mixins:

  • Vous utilisez le mot-clé implements , pas le mot extends clé extends lorsque vous écrivez votre classe de composition
  • Vous devez avoir une signature correspondante pour que le compilateur reste silencieux (mais il ne nécessite aucune implémentation réelle: il le récupérera depuis le mixin).
  • Vous devez appeler applyMixins avec les arguments corrects.

Exemple de mixins

Pour créer des mixins, déclarez simplement des classes légères pouvant être utilisées comme "comportements".

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.');
    }
}

Vous pouvez ensuite appliquer ces comportements à une classe de composition:

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

La fonction applyMixins est nécessaire pour effectuer le travail de composition.

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow