用于观察
- 整个文档
- DOM树的一部分
某个元素
observe() 方法
- 使用 observe() 把 MutationObserver 实例与DOM 关联
- 参数
- 要观察的 DOM 节点
- MutationObserverInit对象
- 用于控制观察哪些方面的变化
- 回调(微任务)与 MutationRecord
- MutationObserver 的回调函数
- 参数
- MutationRecord 实例数组
- 参数
- MutationObserver 的回调函数
- MutationObserver 的实例
- disconnect() 方法
- 被观察元素不会被垃圾回收
- 使用 disconnect() 后
- 停止此后变化事件回调
- 抛弃已经加入任务队列要异步执行的回调
- 使用 setTimeout() 可以让回调执行完再 disconnect()
- 复用 MutationObserver
- 多次调用 observe() 方法
- MutationRecord.target 标识发生变化事件的目标节点
- disconnect()会停止观察所有目标
- 重用MutationObserver
异步回调与记录队列
记录队列
- 回调微任务异步执行
多变化事件
DOM3 替代 DOM2 的 MutationEvent 而设计
- 将变化回调委托给微任务执行
- 不是没有代价
- MutationObserver 的引用 非对称
- MutationObserver 对目标节点为弱引用
- 目标节点对 MutationObserver 是强引用
- MutationRecord 的引用
- 从 MutationRecord 抽出最有用信息,然后保存对一个新对象,抛弃MutationRecord
- MutationObserver 的引用 非对称