1 / 16
文档名称:

ES6新特性:JavaScript中的Reflect对象.docx

格式:docx   大小:62KB   页数:16页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

ES6新特性:JavaScript中的Reflect对象.docx

上传人:mh900965 2017/12/22 文件大小:62 KB

下载得到文件列表

ES6新特性:JavaScript中的Reflect对象.docx

相关文档

文档介绍

文档介绍:Reflect介绍:
Reflect这个对象在我的node()中还没有实现, babel()也没有实现,新版本的chrome是支持的, ff比较早就支持Proxy和Reflect了,要让node支持Reflect可以安装harmony-reflect ;
Reflect不是构造函数, ()调用, Reflect有的方法和Proxy差不多, 而且多数Reflect方法原生的Object已经重新实现了。
什么要使用Reflect
这里列举几个为什么要使用Reflect的原因, 译文地址:Reflect , 大概翻译了一遍:
1:更加有用的返回值: Reflect有一些方法和ES5中Object方法一样样的, 比如: ,  不过, (obj, name, desc)执行成功会返回obj, 以及其它原因导致的错误, , 如下代码可以重构:
try {
(obj, name, desc);
// property defined essfully
} catch (e) {
// possible failure (and might accidentally catch the wrong exception)
}
重构成这样:
if ((obj, name, desc)) {
// ess
} else {
// failure
}
其余的方法, , , , , 都可以进行重构;
2:函数操作,  如果要判断一个obj有定义或者继承了属性name, 在ES5中这样判断:name in obj ; 或者删除一个属性:delete obj[name],  虽然这些很好用, 很简短, 很明确, 但是要使用的时候也要封装成一个类;
有了Reflect, 它帮你封装好了, (obj, name),  (obj, name);
3:更加可靠的函数式执行方式: 在ES中, 要执行一个函数f,并给它传一组参数args, 还要绑定this的话, 要这么写:
(obj, args)
但是f的apply可能被重新定义成用户自己的apply了,所以还是这样写比较靠谱:
(f, obj, args)
上面这段代码太长了, 而且不好懂, 有了Reflect, 我们可以更短更简洁明了:
(f, obj, args)
4:可变参数形式的构造函数: 想象一下, 你想通过不确定长度的参数实例化一个构造函数, 在ES5中, 我们可以使用扩展符号, 可以这么写:
var obj = new F(...args)
不过在ES5中, 不支持扩展符啊, 所以, ,, 可惜F是一个构造函数, 这个就坑爹了, 不过有了Reflect, 我们在ES5中能够这么写:
var obj = (F, args)
5:控制访问器或者读取器的this: 在ES5中, 想要读取一个元素的属性或者设置属性要这样:
var name = ... // get property name as a string
obj[name] // generic property lookup
obj[name] = value // generic property update
, 而且他增加了一个额外的参数reciver, 允许我们设置对象的setter和getter的上下this:
var name = ... // get property name as a string
(obj, name, wrapper) // if obj[name] is an accessor, it gets run with `t