サーチ…


構文

  • クラスBeetleGuyはクライムブ、防弾{}を実装しています
  • applyMixins(BeetleGuy、[Climbs、Bulletproof]);

パラメーター

パラメータ説明
派生コーラーコンポジションクラスとして使用するクラス
baseCtors コンポジションクラスに追加されるクラスの配列

備考

ミックスインには3つのルールがあります:

  • コンポジションクラスを記述するときは、 extendsキーワードではなくimplementsキーワードを使用します
  • コンパイラを静かに保つためには、一致するシグネチャを用意する必要があります(実際の実装は必要ありません。ミックスインから取得します)。
  • 正しい引数を指定してapplyMixinsを呼び出す必要があります。

ミックスインの例

ミックスインを作成するには、「ビヘイビア」として使用できる軽量クラスを宣言するだけです。

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

次に、これらのビヘイビアをコンポジションクラスに適用できます。

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

applyMixins関数は、合成作業を行うために必要です。

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
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow