Skip to content

Instantly share code, notes, and snippets.

@JerryC8080
Forked from ruanyf/proxy.js
Created November 30, 2016 04:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save JerryC8080/0d14a028f62a1212edb1c23f37314f84 to your computer and use it in GitHub Desktop.
Save JerryC8080/0d14a028f62a1212edb1c23f37314f84 to your computer and use it in GitHub Desktop.
使用 Proxy 实现观察者模式
// 实现
const queuedObservers = new Set();
const observe = fn => queuedObservers.add(fn);
const observable = obj => new Proxy(obj, {set});
function set(target, key, value, receiver) {
const result = Reflect.set(target, key, value, receiver);
queuedObservers.forEach(observer => observer());
return result;
}
// 使用方法
const person = observable({
name: '张三',
age: 20
});
function print() {
console.log(`${person.name}, ${person.age}`)
}
observe(print);
person.name = '李四';
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment