Я хочу смоделировать объект JavaScript в производственном коде, чтобы его можно было настроить, чтобы он ничего не делал. Объект довольно сложный и имеет много свойств, включая вложенные свойства и функции. Доступ к любому свойству не должен приводить к ошибке TypeError и не должен иметь побочных эффектов. Выполнение любого имени функции должно быть oop. Пример счетчика:
// Naive attempt at resetting the object so it does nothing:
let client = {};
// This will produce a type error:
client.some.nested.prop.here = 10;
// This will produce a type error:
console.log(client.some.nested.prop.here);
// This will also produce a type error:
client.someFunction();
До сих пор я пробовал использовать обработчик прокси:
const clientHandler = {
set: () => true,
get: () => {
return new Proxy(() => {}, clientHandler);
},
has: () => true,
apply: () => {
console.log('Noop function, mock client used instead.');
},
};
let client = new Proxy({}, clientHandler);
// No type error, code continues working.
client.some.nested.prop.here = 10;
// No type error, code continues working.
console.log(client.some.other.nested.prop);
// Also no type error,
client.does.not.exist.someFunction();
Это работает довольно хорошо. Поэтому я ищу, есть ли более простой способ сделать это, или другой, более идиоматический c подход, или просто любой подход, который может иметь различные плюсы и минусы вышеупомянутого. Также было бы интересно рассмотреть любые улучшения вышеуказанного подхода.