Поиск…


Синтаксис

  • класс 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