Reflect
2019-12-05 09:57:07 0 举报
AI智能生成
ES6-思维导图
作者其他创作
大纲/内容
概述
对应关系
1、Reflect对象的方法与Proxy对象的方法一一对应<br>2、不管Proxy怎么修改默认行为,你总可以在Reflect上获取默认行为<br>
静态方法
Reflect.apply(target, thisArg, args)
Reflect.construct(target, args)
提供了一种不使用new,来调用构造函数的方法<br>Reflect.construct(Greeting, ['张三']) === new Greeting('...')<br>
Reflect.get(target, name, receiver)
receiver参数可以绑定作用域
Reflect.set(target, name, value, receiver)
1、receiver参数可以绑定作用域<br>2、与Proxy联合使用,set拦截函数中<br>Reflect.set(..., receiver)传入了receiver参数<br>那么Reflect.set还会触发Proxy.defineProperty拦截
Reflect.defineProperty(target, name, desc)
Reflect.deleteProperty(target, name)
Reflect.has(target, name)
Reflect.ownKeys(target)
Object.getOwnPropertyNames<br>与Object.getOwnPropertySymbols之和
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)
使用 Proxy 实现观察者模式
1、使用Proxy.set 拦截目标对象 => observable
const observable = obj => new Proxy(obj, {set});
2、用set数据格式存储所有观察者 fn => observe
const queuedObservers = new Set();<br>const observe = fn => queuedObservers.add(fn);<br>
3、用Reflect.set完成默认设值行为
Reflect.set(target, key, value, receiver)
4、当目标对象值发生变化,<br>用保存好的set一一触发所有观察者函数 fn
queuedObservers.forEach(observer => observer());
0 条评论
下一页