ES6 Reflect 概要

本文深入探讨了JavaScript中的Reflect对象和Proxy对象,它们为对象操作提供了新的API。Reflect的主要目的是将Object内置方法迁移并统一,使其行为更合理。例如,Reflect.defineProperty在属性定义失败时返回false,而非抛出错误。此外,Reflect将一些命令式操作转化为函数形式,如Reflect.has和Reflect.deleteProperty。Reflect与Proxy方法一一对应,允许我们自定义对象的行为,而Reflect则提供默认行为。文章还列举了13个Reflect的静态方法,涵盖从属性获取到原型设置的各种操作。

Reflect对象与Proxy对象一样,是为了操作对象而提供的新 API。Reflect对象的设计目的如下:

1. 将Object对象的属于语言内部的方法放到Reflect对象上

2. 修改某些Object方法的返回结果,让其变得合理
    例:Object.defineProperty(obj, name, desc)
        在无法定义属性时,会抛出一个错误
        Reflect.defineProperty(obj, name, desc)
        在无法定义属性时,会返回false
        
3. 让Object命令式操作都变成函数行为
    例:name in obj => Reflect.has(obj,name)
        delete obj[name] => Reflect.deleteProperty(obj,name)
        
4. Reflect对象的方法与Proxy对象的方法一一对应
	Reflect.get => Proxy.get
	...
    不管Proxy怎么修改默认行为,
    总可以在Reflect上获取默认行为。
2. Reflect静态方法(13个)
Reflect.get(target, name, receiver)
Reflect.set(target, name, value, receiver)
Reflect.defineProperty(target, name, desc)
Reflect.deleteProperty(target, name)
//delete 作为关键字已被占用
Reflect.has(target, name)
Reflect.ownKeys(target)
Reflect.isExtensible(target)
Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name)
Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)
Reflect.apply(target, thisArg, args)
Reflect.construct(target, args)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值