semi-xi / blog

blog
4 stars 1 forks source link

Proxy拦截实现监听 #15

Open semi-xi opened 6 years ago

semi-xi commented 6 years ago
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}`)
}
function print2() {
  console.log('222')
}

observe(print);
observe(print2);
person.name = '李四';