ES6 Reflect 介绍, Reflect 相关方法介绍

Reflect

1.0 概述

Reflect 对象与 Proxy 对象一样, 也是ES6为了操作对象而提供的新 API, Reflect 对象的设计目的有这样几个.

  1. Object 对象的一些明显属于语言内部的语法(比如 Object.defineProperty) 放到 Reflect 对象上. 也就是说, 可以从 Reflect 对象上拿到语言内部的方法.
  2. 修改某些 Object 方法的返回结果, 让其变得更合理. 比如Object.defineProperty(obj, name, desc) 在无法定义属性时, 会抛出一个错误, 而 Reflect.defineProterty(obj,name, desc)则返回false`
// 老写法
try {
    
  Object.defineProperty(target, property, attributes);
  // success
} catch (e) {
    
  // failure
}

// 新写法
if (Reflect.defineProperty(target, property, attributes)) {
    
  // success
} else {
    
  // failure
}
  1. Object 操作都变成函数行为, 某些 Object 操作时命令式, 比如 name in objdelete obj[name], 而 reflect.has(obj,name)Reflect.deleteProperty(obj,name) 让它们变成了函数行为.

    const obj = {
          
        name: 'Gene',
    }
    // 老写法
    console.log('name' in obj);
    // 新写法
    Reflect.has(obj, 'name')
    
  2. Reflect 对象的方法与 Proxy 对象的方法一一对应, 只要是 Proxy 对象的方法, 就能在 Reflect 对象上找到对应的方法. 这就让 Proxy 对象可以方便的调用对应的 Reflect方法, 完成默认行为, 作为修改行为的基础, 也就是说, 不管 Proxy 怎么修改默认行为, 你总是可以在 Reflect 上获取默认行为.

2.0 静态方法

Reflect 对象一共有 13 个静态方法.

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

2.1 Reflect.get(target,name,receiver)

Reflect.get 方法查找并返回 target 对象的 name 属性, 如果没有该 name 属性, 则返回 undefined

const obj = {
    
    name: 'Gene',
    age: 18,
    get baz() {
    
        return this.name + '-' + 
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值