跳至主要內容

23. Reflect

Harry Xiong大约 1 分钟Web 前端JavaScriptPromise 对象JS 异步async 与 await

Reflect

Reflect不是一个构造函数,而是一个直接调用的对象,内部装有一些ES6中操作对象的API,里面的方法与Proxy一一对应

Reflect的用处

  • 将Object对象的一些明显语言内部的方法,如Object.defineProperty等放在Reflect对象上,现在虽然在Object对象与Reflect对象中调用这些方法都可以实现,但是在以后会慢慢全部转移到Reflect对象上

  • 修改某些Object对象中的方法的返回结果,让其变得更加合理,如:

    /*
        比如同时定义属性的方法,在无法定义属性时,两者的表现结果完全不同
    */
    Object.defineProperty(obj,name,value);//报错
    Reflect.defineProperty(obj,name,value);//
    
  • 使得对象的操作都变成函数的形式,一些对对象的操作都是命令式的,比如in与delete操作符来对对象操作

    var obj={a:1,b:2,c:3};
    console.log("a" in obj);
    console.log(Reflect.has(obj,"a"));//代替上式
    delete obj.a;
    Reflect.deleteProperty(obj,"a");//代替上式
    
  • Reflect对象的方法与Proxy一一对应,只要是Proxy对象的方法,就能在Reflect对象中找到对应的方法这就让Proxy对象可以方便的调用Reflect方法,完成默认行为,作为修改行为的基础