Я хотел бы иметь возможность использовать базовый класс, который предоставляет общие функциональные возможности для моих классов Yeoman. Что-то вроде:
const Generator = require('yeoman-generator');
class MyCustomGenerator extends Generator {
writing() { /* overridable code here */ }
end() { /* overridable code here */ }
}
module.exports = class extends MyCustomGenerator { /* Custom behavior here */ }
Однако, когда я делаю это, йоменские функции в MyCustomGenerator
, такие как , пишущие и end , не вызываются.
Я посмотрел исходный код Yeoman и обнаружил, что Yeoman смотрит только на свойства расширенного класса: https://github.com/yeoman/generator/blob/master/lib/index.js#L398
Каков наилучший способ расширить класс Yeoman Generator, чтобы я мог обеспечить поведение по умолчанию, которое может быть переопределено подклассами?
Примечания. Я обнаружил, что выполнение следующего странного кода добавит функцию к прототипу дочернего элемента, а дочерний генератор унаследует поведение, как и ожидалось:
class MyCustomGenerator extends Generator {
constructor() {
super();
Object.getPrototypeOf(this).writing = Object.getPrototypeOf(this).writing;
Object.getPrototypeOf(this).end = Object.getPrototypeOf(this).end;
}
writing() { /* overridable code here */ }
end() { /* overridable code here */ }
}