Sök…


Syntax

  • klass BeetleGuy implementerar Climbs, Bulletproof {}
  • ApplyMixins (BeetleGuy, [Climbs, Bulletproof]);

parametrar

Parameter Beskrivning
derivedCtor Klassen som du vill använda som kompositionsklass
baseCtors En rad klasser som ska läggas till i kompositionsklassen

Anmärkningar

Det finns tre regler att tänka på med mixins:

  • Du använder implements sökord inte extends nyckelordet när du skriver din komposition klass
  • Du måste ha en matchande signatur för att hålla kompilatorn tyst (men den behöver inte någon verklig implementering - det kommer att få det från mixin).
  • Du måste ringa applyMixins med rätt argument.

Exempel på Mixins

För att skapa mixins, förklar helt enkelt lätta klasser som kan användas som "beteenden".

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

Du kan sedan tillämpa dessa beteenden i en kompositionsklass:

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

applyMixins funktionen behövs för att utföra kompositionerna.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow