Proxy的简单使用

function fun(person){
    return new Proxy(person,{
        get:function(target,property){
            if(property in target){
                return target[property]
            }else{
                //属性不存在时返回的默认值
                return undefined;
            }
        },
        set:function(target,property,value){
            console.log(target,property,property in target);
            if(target[property]!=value){
                target[property] = value;
            }else{
                console.log("值没有发生变化,无需要重新赋值");
            }
        }
    })
}
let rows = fun({name:'王雪'});
rows.name = '王雪';
rows.age = 120;
console.log(rows);

Proxy 是ES6中提供的一个非常强大的功能,可以用来代理另一个对象,从而拦截、监视并修改这个对象的各种操作

首先是Proxy()的参数:

arget:被代理的对象。
handler:被代理对象上的自定义行为,也就是对arget进行处理的地方
handler处理函数一都有:

get(target, propKey, receiver):拦截对象属性的读取操作。
set(target, propKey, value, receiver):拦截对象属性的设置操作,返回一个布尔值
has(target, propKey):拦截 propKey in proxy 操作,返回一个布尔值
deleteProperty(target, propKey):拦截对象属性的删除操作,返回一个布尔值
apply(target, object, args):拦截 Proxy 实例作为函数调用的操作。
construct(target, args, newTarget):拦截 Proxy 实例作为构造函数调用的操作,返回一个对象

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容