ES6入门系列 ----- Reflect

发布时间:2020-11-17 发布网站:前端之家 F2er.com
前端之家收集整理的这篇文章主要介绍了ES6入门系列 ----- Reflect前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

  Reflect   是ES6 为了操作对象而提供的新的API,目的是:

  1. 将Object 上一些明显属于语言内部的方法,比如 Object.defineProperty  放到 Reflect对象上

现阶段某些方法同时在Object ,  Reflect 上部署,  未来的新方法将只在Reflect对象上部署,也就是说

从Reflect对象上可以获得语言内部的方法。

         2. 修改某些Object 方法的返回结果,让其变得更合理。

    3.让Object的操作都变成函数行为。某些Object操作是命令式,比如name in obj   和  

delete obj[name],    而Reflect.has(obj,name)  和  Reflect.deleteProperty(obj,name)  让它们变成了函数行为。

   4.Reflect 对象的方法与Proxy 对象的方法一一对应, 只要是Proxy 对象上的方法, 就能在Reflect 对象上找到对应的方法。这就使Proxy对象可以方便地调用对应Reflect的方法来完成默认行为,作为修改行为的基础。无论Proxy怎么修改默认行为,我们总可以在Reflect上获取默认行为。

      看个例子:

  

const des = {
    name: 'liu',age: 18
};
const newDes = new Proxy(des,{
    set: function (target,name,value,receiver) {
        let res = Reflect.set(target,receiver);
        // 额外行为
        if (res) {
            console.log(res)
            Reflect.set(target,'age',80return res
    }
});
console.log(newDes);
newDes.name = 'xxxx';
console.log(newDes);

我们对  对象des  的set 方法  做了一层拦截, 每当newDes 设置值的时候,我们先用

Reflect.set() 保证默认行为, 默认行为成功后 再执行我们的额外行为,也就是把age 变成80.

看下执行结果:

ES6入门系列   -----    Reflect

OK , 默认行为name设置成功, 额外行为age也设置成功,

我们还可以代理对象内部的其他方法:

const des = (res) {
            console.log(res);
            Reflect.set(target,1)"> res
    },deleteProperty(target,p) {
        console.log('delete ' + p);
         Reflect.deleteProperty(target,p);
    },get(target,p,receiver) {
        console.log('get ' + Reflect.get(target,receiver);
    }
});
const name = newDes.name;
delete newDes.age;

拦截对象的get方法 和 delete 指令

结果:

ES6入门系列   -----    Reflect

拦截成功。

总结


以上是前端之家为你收集整理的ES6入门系列 ----- Reflect全部内容,希望文章能够帮你解决ES6入门系列 ----- Reflect所遇到的程序开发问题。

如果觉得前端之家网站内容还不错,欢迎将前端之家网站推荐给前端开发程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。