ES6中Proxy与Reflect实现重载(overload)的方法
本文实例讲述了ES6中Proxy与Reflect实现重载(overload)的方法。分享给大家供大家参考,具体如下:
Proxy与Reflect实现重载(overload)
从语法角度讲JavaScript不支持重载。原因很简单,JS中函数可以传入任意类型、任意个数的参数,通通可以通过在函数内使用this.arguments获得。这样,就无法实现同名函数参数列表不同实现不同功能。当然,在实际使用过程中,可以人为去检测传入实参的个数及类型,来进行不同操作。但是,我认为这不能叫做重载。
ES6带来了Proxy和Reflect,配合使用可以实现重载。Proxy用于修改某些操作的默认行为,相当于对原始想进行的操作进行“包装”;Reflect对象的方法与Proxy对象的方法一一对应,这使得Proxy对象可以方便的调用对应的Reflect方法完成默认行为。我们可以这样使用它们:
function LogMessage( m ){ this.m = m; } var message = new LogMessage( 1 ); var overload = new Proxy(message , { get: function(target, key, receiver){ console.log(`getting ${key}`); return Reflect.get(target , key , receiver); }, set: function(target, key, value, receiver){ console.log(`setting ${key}`); return Reflect.set(target, key, value, receiver); } }); overload.m = 2; //setting m var s = overload.m; //getting m
看到了没,是不是很有意思,新创建的Proxy对象overload可以完成目标对象message的操作,同时,可以通过在默认操作之前自定义一些其他操作。我认为,这更像Java里的重载。
那么Proxy与Reflect有哪些实例方法呢?
1.get()
用于拦截某个属性的读取操作。
2.set()
用于拦截某个属性的赋值操作。
3.has()
可以隐藏某些属性,不被in操作符遍历到。
4.construct()
用于拦截new命令。
5.deleteProperty()
用于拦截delete操作。
6.defineProperty()
用于拦截Object.defineProperty操作。
7.enumerate()
用于拦截for...in循环。
8.getOwnPropertyDescriptor()
用于拦截Object.getOwnPropertyDescriptor操作。
9.isExtensible()
用于拦截Object.isExtensible操作。
10.preventExtensions()
用于拦截Object.preventExtensions操作。
11.setPrototypeOf()
用于拦截Object.setPrototypeOf操作。
上面很多方法不是很常用,如果感兴趣可以去查查相关资料
希望本文所述对大家ECMAScript程序设计有所帮助。
相关文章
javascript支持firefox,ie7页面布局拖拽效果代码
javascript 拖拽 页面拖拽 拖拽效果的页面 超级拖拽 javascript支持firefox,ie7页面布局拖拽效果代码 鼠标拖拽2007-12-12trackingjs+websocket+百度人脸识别API实现人脸签到
这篇文章主要介为大家详细绍了trackingjs+websocket+百度人脸识别API实现人脸签到功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-11-11使用weixin-java-miniapp配置进行单个小程序的配置详解
这篇文章主要介绍了使用weixin-java-miniapp配置进行单个小程序的配置详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-03-03详解关于JSON.parse()和JSON.stringify()的性能小测试
这篇文章主要介绍了详解关于JSON.parse()和JSON.stringify()的性能小测试,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-03-03javascript写的简单的计算器,内容很多,方法实用,推荐
最近用javascript写了一个简单的计算器,自己测试感觉还好,代码都给了注释,非常不错,推荐大家学习。2011-12-12
最新评论