①Reflect 更像是一种语法变体,其挂载的所有方法都能找到对应的原始语法,也就是 Reflect 的替代性非常强;
②Reflect 对象挂载了很多静态方法,所谓静态方法,就是和 Math.round () 这样,不需要 new 就可以直接使用的方法;
③比较常用的两个方法就是 get () 和 set () 方法;
④使用 Reflect.set () 方法,就可以知道是否设置成功,因为 Reflect.set () 的返回值是 true 或者 false(只要参数类型准确);
⑤Reflect 方法还有个好处,不会因为报错而中断正常的代码逻辑执行;
⑥就功能而言,Reflect.get () 和 Reflect.set () 方法和直接对象赋值没有区别,都是可以互相替代的;
⑦当需要使用可选参数 receiver 参数的时候,直接对象赋值和使用 Reflect 赋值就会出现差异;
⑧对于 DOM 元素,应用 receiver 参数会报错;
⑨通常情况下,receiver 参数是无需使用的,但是如果发生了继承,为了明确调用主体,receiver 参数就需要出马了;
⑩receiver 参数的作用,可以把调用对象当作 target 参数,而不是原始 Proxy 构造的对象;
⑪Reflect 对象经常和 Proxy 代理一起使用,原因有三点:
1、Reflect 提供的所有静态方法和 Proxy 第 2 个 handle 参数方法是一模一样的;
2、Proxy get/set () 方法需要的返回值正是 Reflect 的 get/set 方法的返回值,可以天然配合使用,比直接对象赋值 / 获取值要更方便和准确;
3、receiver 参数具有不可替代性
(参考:www.zhangxinxu.com/wordpress/2…