immutable 特性
持久化数据结构、结构共享
每一个对象都是不可变的,任何的增加、修改、删除等操作都会生成一个新的对象。如果对象树中只有一个节点发生变化时,只修改改节点和受它影响的父节点,其他节点则共享。
实现简单的 immutable
核心:利用 Proxy
的特性,在外部对目标对象进行修改操作的时候,只将修改部分进行复制,其他没有修改的部分数据共享
- 首先定义一个类,维护数据操作的状态
根据 modified
的值判读目标对象是否被修改过,如果没有被修改则直接返回目标对象属性,否则返回拷贝后的对象属性
1 | class Immutable { |
- 使用
Proxy
给目标对象增加代理方法,检测是否被改变,并返回相对应的结果
1 | const PROXY_STATE = Symbol('state') |
- 验证
1 | let target = { |