解密 ES7 中的 Observer 对象

阅读时长 6 分钟读完

什么是 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

纠错
反馈

纠错反馈