TypeScript
ミックスイン
サーチ…
構文
- クラス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