Reflect对象其实就是为了取代Object对象。取代原因有一下几点:

1)Object对象的一些内部方法放在了Reflect上面,比如:Object.defineProperty。主要是优化了语言内部的方法。

2)修改Object方法的返回,例如:Object.definePropery(obj,name,desc)无法定义属性时报错,而Reflect.definedProperty(obj,name,desc)则会返回false。

3)让Object变成函数的行为,以前的:name in obj和delete obj[name],可以让Reflect.has(name)和Reflect.deleteProperty(obj,name)替代。

4)Reflect方法和Proxy方法一一对应。主要就是为了实现本体和代理的接口一致性,方便用户通过代理操作本体。

ES6提供了Proxy代理对象,不需要开发者自己再去写代理对象的方法,这点很方便,一些代理需求就可以使用Proxy完成,本体的操作可以通过Reflect对象调用。

//定义一个订阅者集合
const queuedObservers = new Set();
//添加订阅者
const observe = fn => queuedObservers.add(fn);
//给对象添加代理对象,代理的set方法中进行遍历订阅者列表
const observable = obj => new Proxy(obj,{set}); function set(target,key,value,receiver){
const result = Reflect.set(target,key,value,receiver);
//遍历订阅者集合,依次触发订阅者方法
queuedObservers.forEach(fn => fn());
//返回订阅者
return result;
} //使用Proxy实现观察者模式[发布-订阅者模式]
const person = observable({name:'张三',age:30}); function print(){
console.log(`${person.name},${person.age}`);
}
function anotherPrint(){
console.log(`你想的很对`)
} //订阅者集合里面加入print订阅者
observe(print);
observe(anotherPrint) person.name = 'miya'

这里实现了一个观察者模式,主要的触发点在对象的set调用后,在代理对象person里面进行观察者方法的触发。

【完】

如果不想动辄就暴露智商 
要么多读书要么少说话

最新文章

  1. SQLSERVER2008 R2安装说明
  2. oracle笔记
  3. LR12.53—第1课:构建Vuser脚本
  4. js整理3
  5. iOS单例的作用和使用
  6. c语言二叉树基本操作
  7. C# WinForm 中Console 重定向输出到ListBox控件中显示
  8. Vijos 1180 (树形DP+背包)
  9. Hadoop1.x与2.x安装笔记
  10. [CODEVS1697]⑨要写信
  11. HDU5778 abs
  12. jQuery选择器(适合初学者哟....)
  13. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(6)-Unity 2.x依赖注入by运行时注入[附源码]
  14. python request的运用
  15. Redis安装及简单測试
  16. hdu 2149 Public Sale 简单博弈
  17. 获取CPU系列号,硬盘系
  18. 简单ATM系统
  19. Url解码和编码 escape()、encodeURI()、encodeURIComponent()区别详解
  20. Error when Building GPU docker image for caffe: Unsupported gpu architecture 'compute_60'

热门文章

  1. bzoj 3450 Tyvj1952 Easy (概率dp)
  2. mysql命令运行sql文件
  3. 3.redis kyes命令
  4. 树状数组 hdu2689 hdu2838
  5. python学习笔记(9)函数(一)
  6. python2查找匹配数据及类型转换
  7. derby数据库的了解及使用
  8. 成组vs成对|H1是受保护的|U检验
  9. Java完成生产者消费者模型
  10. Android开发之《ffmpeg解码mjpeg视频流》