Szukaj…


Składnia

  • klasa BeetleGuy implementuje wspinaczki, kuloodporne {}
  • ApplyMixins (BeetleGuy, [Climbs, Bulletproof]);

Parametry

Parametr Opis
pochodna Klasa, której chcesz użyć jako klasy kompozycji
baseCtors Tablica klas do dodania do klasy kompozycji

Uwagi

W przypadku mixin należy pamiętać o trzech zasadach:

  • Podczas pisania klasy kompozycji używasz słowa kluczowego implements , a nie słowa kluczowego extends
  • Musisz mieć pasującą sygnaturę, aby kompilator był cichy (ale nie potrzebuje żadnej rzeczywistej implementacji - otrzyma to z mixinu).
  • Musisz wywołać applyMixins z poprawnymi argumentami.

Przykład mixinów

Aby stworzyć mixiny, wystarczy zadeklarować lekkie klasy, które mogą być użyte jako „zachowania”.

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

Następnie możesz zastosować te zachowania do klasy kompozycji:

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

Funkcja applyMixins jest potrzebna do wykonania kompozycji.

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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow