Reflect

定义

  1. 它是一个对象,主要提供了很多操作js对象的方法,像Object中操作对象的方法,一般都通过内置的方法进行操作

使用场景:

  1. 和Proxy搭配使用
  2. Q: 那为什么要用Reflect而不是Object?
    A: Object为构造函数,这些操作不合适,并且还包含了in、delete操作符,让JS看起来会有一些奇怪

    注意: 如果可以使用Reflect那么尽量使用Reflect

Reflect常见方法

  1. 定义: 和proxy的13种捕获方法一一对应
    const obj = { name:'nano', age: 18 }
    const objProx = new Proxy(obj,{
      set(target,key,value,receiver){
        return Reflect.set(target,key,value,receiver)
      }
    })
    objProx.age = 20
    console.log(obj) --> { name:'nano', age: 18 }

receiver参数的作用以及与Proxy中的receiver区别

  1. 定义: Reflect中的receiver是改变原对象中的函数的this指向
  2. 区别: proxy中的receiver是创建出来的代理对象,Reflect中的receiver是改变原对象中的函数的this指向

    注意:只有get和set函数有receiver参数

Reflect的construct方法(用的较少)

  1. 定义: 更改构造函数的类型
  2. 使用: Reflect.construct( 需要转变类型的构造函数, 构造函数参数(数组形式), 目标类型的构造函数 )
    function Student( name,age ){
      this.name = name
      this.age = age
    }
    function Teacher(){
     
    }
    
    let teacher = Reflect.construct( Student,['nano',18], Teacher )
    
    console.log(teacher) --> 就变成了Teacher类型

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!