首页 > 自考资讯 > 高考百科

1分钟搞懂什么是 JS 代理对象(proxies)

小条 2024-06-27

今天我们就花点时间快速了解一下什么是JS代理对象(proxy)。这样理解的话,JS代理就相当于在一个对象的外层加了一层拦截,让你可以在对象定义之后通过它的方法来间接操作该对象。由代理定义。更简单地说,在我们的生活中,我们买房或者租房的时候,通常首先不会找中介,而是找房东。这是因为经纪人充当财产的代理人。

接下来我们就通过代码来了解一下什么是代理。使用JS创建代理相对容易,如下代码所示。

letInitialObject={ /* 定义对象*/};let handler={ /* 自定义相关拦截器处理逻辑*/};let proxyedObject=new Proxy(initialObject, handler); 简而言之,执行一次代理调用要做的事。处理程序中定义的用于操作对象的逻辑。对象代理有两个参数。 initialObject是目标对象,handler是拦截器对象(也称为处理器对象)。

接下来我们看一个例子。如果对象的属性不存在,则重写原始对象的get 方法。代理人。

let Dog={ name: 'Spike'};const handler={ get: (obj, property)=obj 的属性? obj[property] : '没有名为+ property 的属性;}const proxyDog=new proxy (dog, handler);console .log(proxyDog.name);//Spikeconsole.log(proxyDog.age);//未定义名为age 的输出属性。 在上面的例子中,我们通过get: ( obj , property)=. 方法覆盖对象的get 方法。

最后,我们将了解如何通过代理更新对象的值。如果更新后的值不是预期值,系统会抛出异常错误,无法更新成功。否则,通过重新分配值来更新属性。的对象。

let Dog={ name: 'Spike',age: 1;};let handler={ set: (obj, property, value)={ if (property==='age') { if (!Number.isInteger(value)) throw new TypeError('仅使用数字表示年龄'); if ((value 0) || (value 30)) throw new RangeError('狗活不了那么久'); } };const proxyDog=new Proxy(dog, handler);proxyDog.age=-1;//抛出狗无法生存longproxyDog.age='very old';//只抛出通过JS 代理的数字。你不仅可以重写getter和setter方法,还可以执行deleteProperty、construct、getOwnPropertyDescriptor等操作。

这就是今天文章的全部内容。你了解代理对象吗?下一篇文章将讨论在实际项目中使用代理。

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

丹尼尔

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢