Я хочу создать бесконечный объект «что угодно», имеющий следующие два свойства:
- Каждое свойство в объекте «все» - это еще один объект «все».
- Каждое свойство в объекте "все" также является функцией, которая возвращает объект "все".
Цель состоит в том, чтобы просто смоделировать объекты в тестах, когда более конкретная имитация не требуется.
Свойство 1 выполняется Как сделать объект, имеющий бесконечную глубину, через произвольные свойства в Javascript? , но в нем отсутствует свойство 2. Решение должно быть в ES5 по причинам среды выполнения.
var p = infiniteDepthObject();
// All of the following should be defined for arbitrary property names at any depth
p.foo
p.foo.bar
p.foo().bar
p.foo().bar()
p.foo.bar()
p.foo.bar.baz
p.foo.bar.baz()
p.foo.bar().baz
p.foo().bar.baz
p.someOtherPropertyChosenAtRunTime()
... etc
Можно ли это сделать в ES5 без полизаполнения для Proxy?
РЕДАКТИРОВАТЬ: не дубликат Как работает базовое связывание объектов / функций в javascript? .Я знаю, что могу вернуть 'this' из функции в цепочку.Вопрос в том, чтобы определить все возможные свойства как «цепные» методы.То есть p.whwhatYouCanImagine () возвращает p, а также p.anyOldPropertyName, так как доступ к свойству возвращает p ИЛИ в обоих случаях возвращает новый объект, который выполняет ту же функцию, что и p.Не цепочка, но некоторая форма цепочки может решить эту проблему.Сложная / другая часть заключается в том, что во время выполнения я могу выбрать свойство для доступа, которое не записано в объект, и оно все равно должно работать.