Nat*_*ley 5 dictionary set ecmascript-6
有什么方法可以观察 ES6 地图和集合的添加和删除吗?Object.observe不起作用,因为它仅适用于被观察对象的直接属性。假设size
可以观察到该属性,但不会提供具体发生了什么变化的指示。另一个想法是用代理版本替换对象set
和函数。get
有没有更好的办法?如果没有,我很惊讶在为 ES6 编写提案时没有人想到这一点。
不,使用普通地图/集合无法做到这一点。一般来说,单独观察对象属性是有争议的(这就是为什么这Object.observe
只是一个提案,而不是规范中可接受的部分)。观察私有状态,例如 Map 或 Set(或 Date 或 Promise,就此而言)的内部结构,绝对不可行。
另请注意,sincesize
是 getter,而不是数据属性,Object.observe
因此不会通知您对其进行的更改。
正如您提到的,您可以通过变异者和观察者之间的协作来实现这种“观察”。您可以使用普通的映射/集加上侧通道(例如返回对象的函数{ Map, EventEmitter }
),或者通过为此目的定制的子类,或者为此目的创建的特定实例来实现此目的。