Нужно перехватывать обращение ко всем свойствам объекта, в том числе и к несуществующим, для всех объектов, которые созданы или будут созданы.
Пробовал найти способ через Proxy или __defineGetter__, но там только для тех объектов, которые уже созданы.
Сделал перехват hasOwnProperty. Это почти то, но нужно перехватывать именно обращение.
Object.prototype.hasOwnProperty = new Proxy(Object.prototype.hasOwnProperty, {
apply(target, prop, receiver) {
let value = Reflect.apply(...arguments);
return typeof value == 'function' ? value.bind(target) : value;
}
});