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