首页 > 编程知识 正文

js在线代理(js代理模式)

时间:2023-05-06 12:10:00 阅读:97995 作者:2705

今天,我们将尝试花1分钟时间简要了解什么是JS代理?我们可以理解为JS代理相当于在对象的外层增加了一层拦截。在拦截方法上,我们可以定制一些个性化的逻辑。定义之后,我们可以通过代理定义的方法间接操作对象。说白了,在我们的生活中,一般不会找房东先找中介,因为中介充当的是房屋的代理人。

接下来,让我们通过代码了解什么是代理。用JS创建代理相对简单,如下面的代码所示:

让initialObject={/*定义对象*/};

让处理程序={/*自定义相关拦截器处理逻辑*/};

让proxydobject=new Proxy(initial object,handler);

简单来说,我们可以调用处理程序中定义的逻辑,通过代理来操作对象。对象代理有两个参数:initialObject是目标对象,而handler是拦截器对象(或处理器对象)。

接下来,我们来看一个例子。我们通过代理实现读取对象的属性。如果对象的属性不存在,将返回代理中定义的默认值。这里,我们重写代理中原始对象的get方法。

让狗=

名称为: '尖峰'

};

常量处理程序={ 0

get: (obj,property)=obj中的属性?obj[property] :“您没有定义名为‘property’的属性;

}

const proxyDog=new Proxy(狗,处理程序);

console . log(ProxyDog . name);

//将输出尖峰

console . log(ProxyDog . age);

//输出您没有定义名为age的属性。

在上面的例子中,我们通过get: (obj,property)=重写了对象的get方法.方法。

最后,我将看看如何通过代理检查对象的值。如果更新的值不是我们期望的,系统会抛出异常,不能正常更新,否则,重新赋值,更新对象的属性。

让狗=

名称: '尖峰',

年龄: 1;

};

let handler={

set: (obj,属性,值)={ 0

if(property===' age '){ 0

if(!Number.isInteger(value))抛出新类型错误('仅将数字用于年龄');

如果((值0) ||(值30))抛出新的范围错误(‘狗活不了那么久’);

}

obj[prop]=值;

返回真;

}

};

const proxyDog=new Proxy(狗,处理程序);

proxy Dog . age=-1;

//会扔狗活不了那么久

proxyDog.age='非常旧';

//将抛出仅使用年龄数字

通过JS代理,我们不仅可以重写getters和setters方法,还可以做这些操作:deleteProperty、construct、getOwnPropertyDescriptor等。

今天的文章到此结束。我不知道你是否理解代理对象。在下一篇文章中,我们来谈谈agent在实际项目中的应用。感谢阅读。

来源:http://www.js-craft.io/blog/what-are-javascript-proxies/

丹尼尔(男子名)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。