什么是 Observer 对象
Observer 是ES7中新增的一个全局对象,它有一个 observe API 可以监听对象,数组,甚至是 DOM 对象的变化。
----- --- - --- --------------------- ------- -- - --------------------- ---
Observer.observe 方法的参数
Observer.observe 方法的参数有两个,第一个是监听的对象,第二个是回调函数,这个回调函数会在对象发生变化的时候被调用。
回调函数的参数为一个数组,数组内每个元素又是一个对象,这个对象包括了变化前后的值和类型。例如:
----- --- - - ----- ----- -- --------------------- ------- -- - --------------------- -- -- ------- ------ ----- ------ --------- ---------- --------- ---- --- ------- - ---
Observer.observe 方法支持的数据类型
Observer.observe 方法不仅支持普通对象,还支持数组和 DOM 对象。
监听数组
----- --- - ------- ------- --------------------- ------- -- - --------------------- -- -- ------- --------- ------ -- ----------- -- -------- --------- --- ------------- -- -------
监听 DOM 对象
---- -------------- -----------
----- --- - ------------------------------- --------------------- ------- -- - --------------------- -- -- ------- ---------------- --------- ------ ------- --------- ------ ----------- --- ------------------------ - ------ ----------
Observer.observe 方法不支持的数据类型
由于 Observer.observe 方法是通过 Object.defineProperty 来监听属性的变化,因此它无法监听以下类型:
- Map 和 Set
- WeakMap 和 WeakSet
- Symbol 类型的 key
- 不可配置的属性
如何使用 Observer 对象
Observer对属性的变化的监听非常适合应用于MVVM框架中,可以通过该特性轻松的实现响应式编程。
下面展示了一个vue中响应式编程的实现:
----- --- - ------------- - --------- - --- - ----------- - -------------------- - -------- - --------------------- -- -------------- - - ----- ------- - --------------- ---- --- - ------- - --- -------- - ---- ------- - --- ---------- - ----- -------- ---------- - ----- - -------- - --------------------- ------------------- - - -------- ------------ - ---------------------------- -- - --- ----- - --------- ----- --- - --- ------ -------------------------- ---- - ----- - -- ------------ - ----------------------- - ------ ------ -- ------------- - -- --------- --- ------ - ------- - ----- - --------- ------------- - --- -- ------- ----- --- --------- - --------------- - --- ------ ---- - ----- --- - -------------------- - ---------- - ---------------------- ----------------------------------- -- - --------------------------- ---- - ----------- ----- ------------- ----- ---- -- -- ---------------- ---- -------- -- - --------------- - --------- - --- --- - ----------- --- - --- ------------- ---- ---- - -
使用方式:
----- -- - --- ----- ----- - ------ - - -- ------------------ -- -- - ------------------ --------- -- -------- - - -- ------ ----- -------
总结
Observer 对象是 ES7 中新增的对象,可以用来监听对象,数组和DOM对象的变化,非常适合应用于MVVM框架中。但它并不支持 Map,Set,WeakMap,WeakSet,Symbol类型的 key,以及不可配置的属性。这个功能实现的核心在于 Object.defineProperty 方法。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65419f277d4982a6ebb34376