7

自动生存是否只与“取消引用”未定义的结构有关,因为在 JavaScript 中,如果您指定一个不存在的索引或属性,它不会动态创建它吗?但这不是自动生存,因为您必须首先将底层结构声明为对象或数组?

4

2 回答 2

14

命名空间是 JavaScript 中自动激活可能很方便的一个领域。目前要“命名空间”一个对象,你必须这样做:

var foo = { bar: { baz: {} } };
foo.bar.baz.myValue = 1;

如果 JavaScript 支持 autovivification,则不需要第一行。在 JavaScript 中向对象添加任意属性的能力是由于它是一种动态语言,但并不是完全自动生成的。

于 2011-10-07T18:37:59.707 回答
11

ES6Proxy可用于实现自动生存,

var tree = () => new Proxy({}, { get: (target, name) => name in target ? target[name] : target[name] = tree() });

测试:

var t = tree();
t.bar.baz.myValue = 1;
t.bar.baz.myValue
于 2017-10-23T17:55:54.777 回答