【ES6系列】Reflect

Reflect对象提供了操作JavaScript对象的静态方法,它与Object对象的方法相对应,允许我们以函数行为执行常见的对象操作,如get、set、has、deleteProperty等。Reflect.get用于获取属性值,Reflect.set用于设置属性,Reflect.isExtensible用于判断对象是否可扩展,而Reflect.preventExtensions则用于禁止对象扩展。这些方法使得JavaScript的对象操作更加灵活和可控。
摘要由CSDN通过智能技术生成

概述

Reflect 是为了操作对象而提供的 API,它的设计目的有以下几个。

  • Object 上一些属于语言内部的方法 (比如 Object.defineProperty)放在 Reflect 对象上。现阶段,某些方法同时在 ObjectRelfect 对象上部署,未来的新方法将只部署在 Reflect 对象上。
  • 修改某些 Object 方法的返回结果,让其更加完善。比如,Object.defineProperty(obj,name,desc) 在无法定义属性时,会抛出一个异常,而 Reflect.defineProperty(obj,name,desc) 则会返回 false
  • Object 操作变成函数行为。某些 Object 操作是命令式的,比如 name in objdelete obj[name] ,而 Reflect.has(obj,name)Reflect.deleteProperty(obj,name) 让他们变成了函数行为。
  • Reflect 对象的方法与 Proxy 对象的方法对应,只要是 Proxy 对象的方法,就能在 Reflect 对象上找到对应的方法。这就让 Proxy 对象可以方便的调用对应的方法,完成默认行为。也就是说,不管 Proxy 怎么修改默认行为,你总可以在 Reflect 上获取默认行为。

静态方法

Reflect 对象上一共有13个静态方法,这些大部分与 Object 对象同名甚至作用都是相同的,而且它与 Proxy 对象的方法是对应的。

Reflect.get(target,name,receiver)

Reflect.get() 方法查找并返回 target 对象的 name 属性,如果没有该属性,则返回 undefined。如果 name 属性部署了 getter ,那么将 receiver 绑定到函数中的 this

let person = {
   
    name:"jonas",
    get age(){
   
        return this.age
    }
}

let jonas = {
   ag
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值