ES6入門系列 ----- 使用Proxy 實現觀察者模式

    觀察者模式是指函數自動觀察數據對象的變化, 一旦對象有變化,函數就會自動執行。函數

它定義了一種一對多的依賴關係,咱們用Proxy來實現一個簡單的觀察者模式(PS: 初學咱們認爲代理

觀察者模式 == 發佈訂閱模式, 其實它們有點不一樣)。code

    例子:對象

const callbacks = new Set();
const observe = fn => callbacks.add(fn);
const observable = obj => new Proxy(obj, {set});

function set (target, key, value, receiver) {
const result = Reflect.set(target, key, value, receiver);
callbacks.forEach(observe => observe());
return result;
}
// 一個可觀察的對象
const person = observable({name: 'liu', age: 18});

function change() {
console.log(`${person.name} is ${person.age}`);
}


observe(change);

person.age = 19;
  1. 首先定義了一個observe 用來存儲 要觸發的函數。
  2. 而後定義了一個observable 函數 對  對象的設值作了一層代理,攔截賦值操做, Reflect.set用來完成默認的設值行爲, 而後觸發函數。
  3. 每當對象調用對象內部的的set方法時,就會遍歷觸發咱們添加進callbacks裏的回調函數。

打印結果:當age發生變化時:打印出blog

 

 

 

    這樣咱們就簡單的實現了一個觀察者模式。get

相關文章
相關標籤/搜索