Нужен следующий модуль. На вход подаётся метод объекта и колбэк. Код метода анализируется, на используемые в методе свойства вешаются обозреватели, при изменении любого из этих свойств значение метода пересчитывается и результат передаётся в колбэк.
Пример:
class People {
constructor() {
this.firstName = 'noname';
this.lastName = 'Man';
}
name() {
return this.firstName + ' ' + this.lastName;
}
hello() {
return `Hello, ${this.name()}!`;
}
}
const people = new People();
//вешаем обозреватель на hello
pseudo_observable(people, 'hello', (value) => console.log(value));
people.firstName = 'Cool';
//console.log => Hello, Cool Man!