Я пытаюсь расширить и переопределить метод в классе Singleton в TypeScript, вот код для Singleton Class:
class Singleton {
protected static _instance: Singleton;
protected constructor() { }
public static get instance() {
if (Singleton._instance === undefined) {
Singleton._instance = new Singleton();
}
return Singleton._instance;
}
public doWork() {
console.log('doing work in singleton...');
}
}
ExtendedSingleton Class:
class ExtendedSingleton extends Singleton {
protected static _instance: ExtendedSingleton;
protected constructor() {
super();
}
public static get instance() {
console.log('Creating Extended Singleton');
if (ExtendedSingleton._instance === undefined) {
ExtendedSingleton._instance = new ExtendedSingleton();
}
return ExtendedSingleton._instance;
}
public doWork() {
console.log('doing work in extended singleton...');
}
}
Наконец код, который запускает оба класса:
Singleton.instance.doWork();
ExtendedSingleton.instance.doWork();
Проблема в том, что оба журнала 'выполняют работу в синглтоне ...' , и когда я меняю строки, проблема устраняется.
Я не знаю, почему происходит такое поведение (я думаю, что это в основном то, о чем я не знаю, как работает наследование javascript), или есть ли лучшее решение моей проблемы.
Примечание: Я исправил проблему, используя интерфейс и реализовав его в обоих классах, но это не будет эффективно в большом классе, где мне нужно переопределить один или два метода.