Reflect

描述

Reflect 是一个操作对象的API

Reflect 是一个内置的全局对象,它提供拦截 JavaScript 操作的方法。它不是一个函数对象,所以不能用new

 

优势: 

  相较于之前处理对象的方法 例如Function.prototype.apply\ delete\ in之类的,将一些明显属于语言内部的函数都添加到了Reflect对象中,用一个单一的全局对象去存储这些函数,能够保持JS代码的干净、整洁。

不然的话,这些函数可能是全局的,或者要通过原型来调用,  不方便统一管理。并将一些命令式的操作如delete、in等使用函数来代替,可以让代码更好的维护

const obj = {key: 'id'}
'key' in obj 
=>
Reflect.has(obj,'key')

 

如果一个对象是不能拓展的,那么在调用Object.defineProperty(obj, name, desc)时,会抛出一个异常

const obj = {key: 'id'};
Object.freeze(obj);
Object.defineProperty(obj, 'name', {});

之前我们需要使用try catch来防止页面阻塞

try {
   Object.defineProperty(obj, 'name', {});
} catch(e) {
   console.error(e.message)
}

现在可以直接用if else进行判断了

if(Reflect.defineProperty(obj, 'name', {})) {
    // To do...
} else {
    // To do...
}

 

  • 静态函数
  • Reflect.apply(target, thisArgument, argumentsList)  取代了之前的Function.prototype.apply
    复制代码
    function setXY(x, y) {
        this.x = x;
        this.y = y;
    };
    const obj = {};

    setXY.
    apply(obj, [1,2])
    =>
    Reflect.apply(setXY, obj, [1,2]);
    console.log(obj); //{x: 1, y: 2}
    复制代码

     

  • construct 提供了一种不用new来调用构造函数的方法
    function Animal(name) {
        this.name = name;
    };
    
    const dog = new Animal('Wang Cai');
    const cat = Reflect.construct(Animal, ['Mao Mi']);

     

  • deleteProperty 取代了之前的delete
    const obj = {key: 'id'};
    delete obj.key
    =>
    Reflect.deleteProperty(obj, 'key'); // true or false

     

  • has
 
 
posted @   一路向北√  阅读(454)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

web应用开发&研究 -

业精于勤而荒于嬉。

工作,使我快乐。


Font Awesome | Respond.js | Bootstrap中文网

点击右上角即可分享
微信分享提示