整理学习——ES6的Reflect

Reflect是ES6提供的一种新API,用于操作对象。它包含了与Object类似但更合理的操作方法,并且每个方法都对应Proxy对象的一个方法。本文详细介绍了Reflect.apply、Reflect.construct、Reflect.defineProperty等方法的使用及其异常情况,同时对比了Reflect与Object方法的差异。
摘要由CSDN通过智能技术生成

简单说明

Reflect也是ES6为了操作对象而提供的新API。Reflect是一个内置的对象,它提供拦截JavaScript操作的方法,这些方法与处理器对象的方法相同。它不是一个函数对象,所以不可构造。同时Reflect的所有属性和方法都是静态。
Reflect对象的设计目的有这几个:

  1. 将Object对象的一些明显属于语言内部的方法,放到Reflect对象上。

    目前,某些方法同时在Object和Reflect对象上部署,未来的新方法将值部署在Reflect对象上

  2. 修改某些Object方法的返回结果,让其变得更合理。(比如,Object.defineProperty(obj, name, desc)在无法定义属性时会抛出错误,而Reflect.defineProperty(obj, name, desc)返回false)
  3. 让Object操作都变成函数行为。
    比如name in objdelete obj[name],Reflect中使用Reflect.has(obj, name)Reflect.deleteProperty(obj, name)
  4. Reflect对象的方法与Proxy对象的方法一一对应,只要是Proxy对象的方法,就能在Reflect对象上找到对应的方法。可以使Proxy对象更方便地调用对应的Reflect方法,完成默认行为。

Object与Reflect的差别:

Object Reflect
遭遇错误的结果 报错 返回false
操作 命令式语句 函数行为

Reflect对象的方法

Reflect对象的方法都是静态方法。与Proxy对象中的handler对象的函数类似但要有所区别。

Reflect.apply(target, thisArgument, argumentsList)

对义工函数进行调用操作,同时可以传入一个数组作为调用参数。和Function.prototype.apply()功能相似。
target:目标函数
thisArgument:target函数调用时绑定的this对象
argumentsList:target函数调用时传入的实参列表,该参数应该是一个类数组的对象。

异常

如果target对象不可调用,会抛出TypeError。

Reflect.construct(target, argumentsList[, newTarget])

对构造函数进行new操作,相当于执行new target(...args)。返回以target函数为构造函数,argumentsList为初始化参数的对象实例。
target:被运行的目标构造函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值