Proxy和Reflect

作者: 姜治宇 | 来源:发表于2023-02-26 11:38 被阅读0次

Proxy

Proxy可以监听到对象内部操作的变化,比如对象或数组的增查改删。
相对于Object.defineProperty,最大的优势是它可以监听到数组的长度变化。
有了Proxy,使得vue3的源码简洁了不少。

const arr = [];
//用Proxy包装数组或对象,使之内部操作可以被监听到
const proxyArr = new Proxy(arr,{
    get(target,propName){
        console.log('get',target,propName);
        return target[propName];
    },
    set(target,propName,value){
        console.log('set',target,propName,value);
        target[propName] = value;
        return true;
    },
    deleteProperty(target,propName){
        console.log('delete',target,propName);
        return delete target[propName]
    }
});
setTimeout(()=>{
    proxyArr.push('hello');
},1000);
setTimeout(()=>{
    proxyArr.splice(0,1);
},2000);

Reflect

Reflect就是反射的意思,还是一些对象内部的方法,比如get、set、deleteProperty、defineProperty等,可以放在Reflect这个全局对象上访问到。

const arr = [];
//用Proxy包装数组或对象,使之内部操作可以被监听到
const proxyArr = new Proxy(arr,{
    get(target,propName){
        console.log('get',target,propName);
        return Reflect.get(target,propName);
    },
    set(target,propName,value){
        console.log('set',target,propName,value);
        Reflect.set(target,propName,value);
        return true;
    },
    deleteProperty(target,propName){
        console.log('delete',target,propName);
        return Reflect.deleteProperty(target,propName);
    }
});
setTimeout(()=>{
    proxyArr.push('hello');
},1000);
setTimeout(()=>{
    proxyArr.splice(0,1);
},2000);

相关文章

  • (二)16.Proxy和Reflect19-08-13

    Proxy和ReflectProxy和Reflect的概念Proxy :代理Reflect:反射 Proxy 打印...

  • ECMAScript6--13.Proxy和Reflect

    1.Proxy和Reflect Proxy:代理;连接了用户和最真实对象中间一个层; Reflect :反射;反射...

  • Proxy和Reflect

    Proxy代理## get set delete 结果 ownKeys Reflect## Reflect和Rro...

  • ES6 6.Proxy和Reflect

    Proxy Reflect

  • Proxy和Reflect

    Proxy 概述 Proxy在目标对象之前架设一层"拦截",外界对该对象访问必须先通过这层拦截.因此提供了一种极致...

  • Proxy和Reflect

    Proxy和Reflect 拦截操作get(target,propKey,receiver) 读取属性时拦截拦截器...

  • Proxy和Reflect

    1、Proxy概述Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(met...

  • proxy和reflect

    proxy:可以理解为一种权限设置,将一些数据拦截,使得访问的时候只能访问到设定的内容var proxy = ne...

  • Proxy和Reflect

    Proxy Proxy可以监听到对象内部操作的变化,比如对象或数组的增查改删。相对于Object.definePr...

  • JDK动态代理【3】Proxy类和InvocationHandl

    一、Proxy类,java.lang.reflect.Proxy * {@code Proxy} provides...

网友评论

    本文标题:Proxy和Reflect

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