今天,我们将尝试花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/
丹尼尔(男子名)