Suche…


Syntax

  • Klasse BeetleGuy implementiert Climbs, Bulletproof {}
  • applyMixins (BeetleGuy, [Climbs, Bulletproof]);

Parameter

Parameter Beschreibung
AbgeleiteterCtor Die Klasse, die Sie als Kompositionsklasse verwenden möchten
baseCtors Ein Array von Klassen, die der Kompositionsklasse hinzugefügt werden sollen

Bemerkungen

Bei Mixins sind drei Regeln zu beachten:

  • Sie verwenden das implements Schlüsselwort, nicht das extends Schlüsselwort, wenn Sie Ihre Kompositionsklasse schreiben
  • Sie benötigen eine übereinstimmende Signatur, um den Compiler leise zu halten (aber es ist keine echte Implementierung erforderlich - dies wird durch das Mixin erreicht).
  • Sie müssen applyMixins mit den richtigen Argumenten aufrufen.

Beispiel für Mixins

Um Mixins zu erstellen, deklarieren Sie einfach leichte Klassen, die als "Verhalten" verwendet werden können.

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

Sie können diese Verhalten auf eine Kompositionsklasse anwenden:

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

Die Funktion applyMixins ist für die Kompositionsarbeit erforderlich.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow