ES6 Observer Pattern

// The observed target object
let obj = { name: 'zyc', csdn: 'Blog'};
// Observer
function print() {
    console.log('The object was operated!');
}
// Use proxy
const observeObj = (obj) => new Proxy(obj, {set, get});
// Message queue
const observeQueue = new Set();
const observe = (fn) => observeQueue.add(fn);
 
// Set
function set(target, key, value, receiver) {
    let result = Reflect.set(target, key, value, receiver);
    for(let item of observeQueue) {
        item.call(this);
    }
    return result;
}
// Get
function get(target, key, receiver) {
    let result = Reflect.get(target, key, receiver);
    for (let item of observeQueue) {
        item.call(this);
    }
    return result;
}
 
// Proxy object
let proxy= observeObj(obj);
// Push into the message queue
observe(print);
 
// Trigger test
proxy.name = "Zhang San";
console.log(proxy.name);
 

评论

暂无评论。

登录后可发表评论。