观察 ES6 映射和集的变化

2024-03-21

有什么方法可以观察 ES6 地图和集合的添加和删除吗?对象观察 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe不起作用,因为它仅适用于观察对象的直接属性。假设size可以观察到属性,但不会提供具体发生了什么变化的指示。另一个想法是替换该对象的set and get具有代理版本的功能。有没有更好的办法?如果没有,我很惊讶在为 ES6 编写提案时没有人想到这一点。


不,使用普通地图/集合无法做到这一点。一般来说,仅观察对象属性是有争议的(这就是为什么Object.observe只是一个提案,而不是规范中可接受的部分)。观察私有状态,例如 Map 或 Set(或 Date 或 Promise,就此而言)的内部结构,绝对不可行。

还要注意的是,自从size是一个吸气剂,而不是一个数据属性,Object.observe不会通知您其更改。

正如您提到的,您可以通过变异者和观察者之间的协作来实现这种“观察”。您可以使用普通的 Map/Set 加上侧通道(例如,返回一个{ Map, EventEmitter }对象),或通过为此目的定制的子类,或为此目的创建的特定实例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

观察 ES6 映射和集的变化 的相关文章

随机推荐