Reflect

作者: 骑着蜗牛追飞机_f7fa | 来源:发表于2019-12-11 14:50 被阅读0次

1. Reflect是什么?

Reflect对象与Proxy对象一样,也是ES6为了操作对象而提供的新API。Reflect对象的设计目的有这样几个:
(1)将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上。现在某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect上。也就是说,从Reflect对象上可以拿到语言内部的方法。
(2)让某些Object方法的返回结果更合理。比如,Object.defineProperty在无法定义属性时,会抛出一个错误。而Reflect.defineProperty则会返回false。(但是,Reflect大部分静态方法都会因为参数不是object对象而报错。)
(3)让Object操作都变成函数行为。比如:name in obj和delete obj[name]都是命令式, Reflect.has(obj, name)和Reflect.deleteProperty让它们变成了函数行为。
(4)Reflect对象与Proxy对象方法一一对应。可以作用Proxy修改默认行为的基础。
(5)很多方法更易读:
// 老写法 Function.prototype.apply.call(Math.floor, undefined, [1.75]) // 1
// 新写法 Reflect.apply(Math.floor, undefined, [1.75]) // 1

2. 静态方法

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.construct(target, args)
  Reflect.apply(target, thisArg, args)
  Reflect.defineProperty(target, name, desc) 
  Reflect.getOwnPropertyDescriptor(target, name)
  Reflect.isExtensible(target)
  Reflect.preventExtensions(target)
  Reflect.ownKeys(target)

大部分方法的作用,与Object对象的同名方法作用相同,而且与Proxy对象的方法一一对应。

相关文章

  • ES6(十二)—— Reflect

    Reflect 反射,什么是反射机制? Reflect简介 为什么要用Reflect? Reflect API.a...

  • Reflect反射与代理Proxy

    先看看Reflect有多少属性方法 所以Reflect.set()与Reflect.get()相反 Reflect...

  • golang-reflect

    reflect 示例0 reflect示例1 reflect 示例2 通过反射修改对象属性 reflect 示例3...

  • Go语言学习笔记-反射和Unsafe

    reflect.TypeOf vs reflect.ValueOf reflect.TypeOf 返回类型(ref...

  • 反射

    什么是反射? 为何需要检查变量,确定变量的类型? reflect 包reflect.Type 和 reflect....

  • 反射的用法

    什么是反射? 为何需要检查变量,确定变量的类型? reflect 包reflect.Type 和 reflect....

  • 反射

    反射初识 reflect对象获取接口变量信息 reflect对象设置实际变量的值 reflect对象进行方法的调用

  • CSS3之box-reflect制作倒影

    box-reflect box-reflect:none | ?

  • 反射的实现原理

    反射的demopackage com.java.reflect;import java.lang.reflect....

  • Go奇技淫巧

    string的本质:reflect.StringHeader{}slice的本质:reflect.SliceHea...

网友评论

      本文标题:Reflect

      本文链接:https://www.haomeiwen.com/subject/oabogctx.html