直接 targetday1.onChange()
を呼び出してみたら updateメソッドが呼ばれたので、
this.el.addEventListener('change', this.onChange.bind(this))
による change
イベントが発生しなくて onChange
メソッドが呼ばれていないのではありませんか?
だとしたら、GUIコンポーネント側の問題かイベント名指定ミスかと思われます。
class Subject {
observers = [];
addObserver(observer) {
this.observers.push(observer);
console.log(this.observers);
}
notifyObservers() {
this.observers.forEach(observer => observer.update(this));
}
}
class TargetDay extends Subject {
onChange() {
this.notifyObservers()
}
}
class Observer {
update(subject) {
throw new Error('ここではなく子クラスで実装を行う')
}
}
class MyCalendar extends Observer {
}
class DayOfWeek {
update(calendar) { //日付が変わったときに呼び出したいメソッド。これがうまく>機能しない
console.log("updated");
}
}
const today = new Date();
const cal1 = new MyCalendar(today);
const targetday1 = new TargetDay();
const dayOfWeek1 = new DayOfWeek();
targetday1.addObserver(dayOfWeek1);
targetday1.onChange();
[ DayOfWeek {} ]
updated