Skip to content

Instantly share code, notes, and snippets.

@ruanyf
Created November 28, 2016 06:41
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save ruanyf/61e272b0a0c986425b6ffe6fb13e9e2c to your computer and use it in GitHub Desktop.
Save ruanyf/61e272b0a0c986425b6ffe6fb13e9e2c 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