Макет JavaScript объекта в производственном коде - PullRequest
1 голос
/ 10 января 2020

Я хочу смоделировать объект 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 подход, или просто любой подход, который может иметь различные плюсы и минусы вышеупомянутого. Также было бы интересно рассмотреть любые улучшения вышеуказанного подхода.

...