TypeScript
Примеси
Поиск…
Синтаксис
- класс BeetleGuy реализует Climbs, Bulletproof {}
- applyMixins (BeetleGuy, [Climbs, Bulletproof]);
параметры
параметр | Описание |
---|---|
derivedCtor | Класс, который вы хотите использовать в качестве класса композиции |
baseCtors | Массив классов, добавляемых в класс композиции |
замечания
Существует три правила, которые следует учитывать при использовании миксинов:
- Вы используете
implements
ключевое слово, неextends
ключевое слово , когда вы пишете класс композиции - У вас должна быть соответствующая подпись, чтобы держать компилятор в тишине (но он не нуждается в какой-либо реальной реализации - он получит это из mixin).
- Вы должны вызвать
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