ES6新特性:JavaScript中的Reflect对象

ES6新特性:JavaScript中的Reflect对象

ID:42562479

大小:62.73 KB

页数:16页

时间:2019-09-17

ES6新特性:JavaScript中的Reflect对象_第1页
ES6新特性:JavaScript中的Reflect对象_第2页
ES6新特性:JavaScript中的Reflect对象_第3页
ES6新特性:JavaScript中的Reflect对象_第4页
ES6新特性:JavaScript中的Reflect对象_第5页
资源描述:

《ES6新特性:JavaScript中的Reflect对象》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Reflect介绍:Reflect这个对象在我的node(v4.4.3)中还没有实现,babel(6.7.7)也没有实现,新版本的chrome是支持的,ff比较早就支持Proxy和Reflect了,要让node支持Reflect可以安装harmony-reflect ;Reflect不是构造函数,要使用的时候直接通过Reflect.method()调用,Reflect有的方法和Proxy差不多,而且多数Reflect方法原生的Object已经重新实现了。什么要使用Reflect这里列举几个为什么要使用Refle

2、ct的原因,译文地址:Reflect ,大概翻译了一遍:1:更加有用的返回值: Reflect有一些方法和ES5中Object方法一样样的,比如:Reflect.getOwnPropertyDescriptor和Reflect.defineProperty, 不过,Object.defineProperty(obj,name,desc)执行成功会返回obj,以及其它原因导致的错误,Reflect.defineProperty只会返回false或者true来表示对象的属性是否设置上了,如下代码可以重构:try{O

3、bject.defineProperty(obj,name,desc);//propertydefinedsuccessfully}catch(e){//possiblefailure(andmightaccidentallycatchthewrongexception)}重构成这样:if(Reflect.defineProperty(obj,name,desc)){//success}else{//failure}其余的方法,比如Relect.set,Reflect.deleteProperty,Reflec

4、t.preventExtensions,Reflect.setPrototypeOf,都可以进行重构;2:函数操作, 如果要判断一个obj有定义或者继承了属性name,在ES5中这样判断:nameinobj ;或者删除一个属性:deleteobj[name], 虽然这些很好用,很简短,很明确,但是要使用的时候也要封装成一个类;有了Reflect,它帮你封装好了, Reflect.has(obj,name), Reflect.deleteProperty(obj,name);3:更加可靠的函数式执行方式: 在ES

5、中,要执行一个函数f,并给它传一组参数args,还要绑定this的话,要这么写:f.apply(obj,args)但是f的apply可能被重新定义成用户自己的apply了,所以还是这样写比较靠谱:Function.prototype.apply.call(f,obj,args)上面这段代码太长了,而且不好懂,有了Reflect,我们可以更短更简洁明了:Reflect.apply(f,obj,args)4:可变参数形式的构造函数: 想象一下,你想通过不确定长度的参数实例化一个构造函数,在ES5中,我们可以使用扩展

6、符号,可以这么写:varobj=newF(...args)不过在ES5中,不支持扩展符啊,所以,我们只能用F.apply,或者F.call的方式传不同的参数,可惜F是一个构造函数,这个就坑爹了,不过有了Reflect,我们在ES5中能够这么写:varobj=Reflect.construct(F,args)5:控制访问器或者读取器的this: 在ES5中,想要读取一个元素的属性或者设置属性要这样:varname=...//getpropertynameasastringobj[name]//genericpro

7、pertylookupobj[name]=value//genericpropertyupdateReflect.get和Reflect.set方法允许我们做同样的事情,而且他增加了一个额外的参数reciver,允许我们设置对象的setter和getter的上下this:varname=...//getpropertynameasastringReflect.get(obj,name,wrapper)//ifobj[name]isanaccessor,itgetsrunwith`this===wrapper`R

8、eflect.set(obj,name,value,wrapper)访问器中不想使用自己的方法,而是想要重定向this到wrapper:varobj={setfoo(value){returnthis.bar();},bar:function(){alert(1);}};varwrapper={bar:function(){console.log("wrapper");}}Reflec

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。