ES2015 Reflect 统一的对象操作API

一、Reflect是什么?

Reflect属于一个静态类,也就是说他不能通过new方法去构建一个实例对象 new Reflect

只能够去调用这个静态类的一些静态方法,比如 Reflect.get( ),Math对象也是如此。

Reflect 内部封装了一系列对对象的底层操作,提供了13个静态方法。

  • Reflect.get(target, name, receiver)
  • Reflect.set(target, name, value, receiver)
  • Reflect.has(target, name)
  • Reflect.deleteProperty(target, name)
  • Reflect.getPrototypeOf(target)
  • Reflect.setPrototypeOf(target, prototype)
  • Reflect.isExtensible(target)
  • Reflect.preventExtensions(target)
  • Reflect.getOwnPropertyDescriptor(target, name)
  • Reflect.defineProperty(target, name, desc)
  • Reflect.ownKeys(target)
  • Reflect.apply(target, thisArg, args)
  • Reflect.construct(target, args)

这13个方法的方法名与Proxy对象中的处理对象的方法是完全一致的。

Proxy对象中的处理对象的方法:

handler方法触发方式
get读取某个属性
set写入某个属性
hasin 操作符
deletePropertydelete操作符
getPrototypeOfObject.getPrototypeOf()
setPrototypeOfObject.setPrototypeOf()
isExtensibleObject.isExtensible()
preventExtensionsObject.preventExtensions()
getOwnPropertyDescriptorObject.getOwnPropertyDescriptor()
definePropertyObject.defineProperty()
ownKeysObject.getOwnPropertyNames() 、Object.getOwnPropertySymbols()
apply调用一个函数
construct用new调用一个函数

Reflect成员方法就是Proxy处理对象的默认实现。点击查看Proxy

const obj = {
  name : 'luyu',
  age:18
}
const proxy = new Proxy(obj,{
  get(target,property){
    // 自己的处理逻辑
    console.log('watch logic')
    return Reflect.get(target,property)
  }
})
console.log(proxy.foo) // 输出 watch logic   luyu 

二、为什么ES2015新增 Reflect

Reflect的使用方法很简单,MDN上都可以查到。

很多人可能会觉得疑惑,既然是操作对象,我们以前已经有操作对象的方法了。

为什么还要有新增这个Reflect 呢?它的价值具体体现在什么地方?

Reflect 最大的意义就是:统一提供了一套用于操作对象的API

在这之前,在操作对象时,我们有可能会使用Object对象上的方法,也有可能会使用indelete之类的操作符,

这对新手来说太乱了,没什么规律。

看下面的对比例子就明白了:

const obj = {
  name : 'luyu',
  age:18
}
// 判断对象是否存在某个属性
console.log('name' in obj)
console.log(delete obj['age'])
// 获取对象所有的属性名
console.log(Object.keys(obj))


// Reflect 的用法。
// 以后的标准,会把以前的对象操作方法废弃掉,用Reflect来代替

// 判断对象是否存在某个属性
console.log(Reflect.has(obj,'name'))
console.log(Reflect.deleteProperty(obj,'age'))
// 获取对象所有的属性名
console.log(Reflect.ownKeys(obj))

以后的标准,会把以前的对象操作方法废弃掉,用Reflect来代替。

现在就可以用起来啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值