无限深度对象,具有_any可能的property_,定义为两者都是并且返回另一个无限深度对象的函数。 JS

问题描述 投票:0回答:1

我想创建一个具有以下两个属性的无限深度“任何”对象:

  1. 任何对象上的每个属性都是另一个对象。
  2. any对象上的每个属性也是一个返回任何对象的函数。

目的是在不需要更具体的模拟时,在测试中简单地模拟对象。

属性1由How do I make an object that has infinite depth through arbitrary properties in 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

这可以在没有代理的polyfill的情况下在ES5中完成吗?

编辑:不是How does basic object/function chaining work in javascript?的副本。我知道我可以将'this'从函数返回到链。问题是将所有可能的属性定义为“链”方法。那就是p.whateverYouCanImagine()返回p并且p.anyOldPropertyName作为属性访问返回p OR在两种情况下都返回一个执行与p相同功能的新对象。没有链接,但某种形式的链接可以解决这个问题。困难/不同的部分是,在运行时我可能会选择一个未写入对象的访问属性,它仍然可以工作。

javascript mocking ecmascript-5
1个回答
-1
投票

这是循环依赖:

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

这就是全部,这是一个无限的对象,您可以通过函数替换属性a以返回相同的对象

© www.soinside.com 2019 - 2024. All rights reserved.