Объект бесконечной глубины, у которого _any возможные свойства_ определены как функция, которая является и возвращает другой объект бесконечной глубины.JS - PullRequest
0 голосов
/ 13 сентября 2018

Я хочу создать бесконечный объект «что угодно», имеющий следующие два свойства:

  1. Каждое свойство в объекте «все» - это еще один объект «все».
  2. Каждое свойство в объекте "все" также является функцией, которая возвращает объект "все".

Цель состоит в том, чтобы просто смоделировать объекты в тестах, когда более конкретная имитация не требуется.

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

1 Ответ

0 голосов
/ 13 сентября 2018

Это круговая зависимость:

const a = {};
a.a = a;

Вот и все, это бесконечный объект, и вы можете заменить атрибут a на функцию, возвращающую тот же объект

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...