JS中ES6代理代理怎么用

  介绍

这篇文章主要为大家展示了“JS中ES6代理代理怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS中ES6代理代理怎么用”这篇文章吧。

代理的概念

<代码> 代理英文原意是代理的意思,在<代码> ES6> 元编程>

<代码>代理> 语法

var  proxy =, new 代理(目标,,处理程序);

通过构造函数生成代理代码 <代码>,<代码> 目标参数是要拦截的目标对象,<代码>处理程序>

<强>例子

var  obj =, new 代理(   {},才能   {才能   ,,,,得到:,function (关键目标,,,,接收器),{   ,,,,,console.log (“getting  ${关键}!”);   ,,,,,return  Reflect.get(目标,,,,接收机);   ,,,},   ,,,:,function (关键目标,,,,,,接收器),{   ,,,,,console.log (“setting  ${关键}!”);   ,,,,,return  Reflect.set(目标,,,,,,接收机);   ,,,},   ,,}   );

一般将<代码>处理> 代理>

对代理操作才有拦截效果,而不是目标对象。

<强>代理实例的方法

当读取不存在的属性时候,抛出错误而不是返回<代码>定义

var  person =, {   ,,名字:“张三“,   };      var  proxy =, new 代理(人,,{   ,,得到:function (目标,财产),{   ,,,if  (property 拷贝;目标),{   ,,,,,return 目标(财产);   ,,,},{else    ,,,,,throw  new  ReferenceError (& # 39; Property “& # 39;, +, Property  +, & # 39;“, does  not 存在# 39;公司);   ,,,}   ,,},   });      proxy.name;,//,“张三“;   proxy.age;,//,抛出一个错误

拦截读取继承属性

let  proto =, new 代理(   {},才能   {才能   ,,,get(目标,propertyKey,,接收器),{   ,,,,,console.log (“GET “, +, propertyKey);   ,,,,,return 目标(propertyKey);   ,,,},   ,,}   );      let  obj =, Object.create(原型);   obj.xxx;,//,“GET  xxx"

数组读取负数索引(负数索引表示倒着取数)

function  createArray(…元素),{   let 才能;handler =, {   ,,,get(目标,propKey,,接收器),{   ,,,,,let  index =,数量(propKey);   ,,,,,if  (index  & lt;, 0), {   ,,,,,,,propKey =,字符串(时间+ target.length 指数);   ,,,,,}   ,,,,,return  Reflect.get(目标,propKey,,接收机);   ,,,},   ,,};      let 才能;target =, [];   target.push才能(…元素);   return 才能;new 代理(目标,,处理程序);   }      let  arr =, createArray (“a",,“b",,“c");   arr [1];,//, c

实现数据的限制

let  validator =, {   ,,:function  (obj,,,,值),{   ,,,if  (prop ===,“age"), {   ,,,,,if  (! Number.isInteger(值)),{   ,,,,,,,throw  new  TypeError (“, age  is  not  an  integer");   ,,,,,}   ,,,,,if  (value 祝辞,200),{   ,,,,,,,throw  new  RangeError (“, age  seems  invalid");   ,,,,,}   ,,,}      ,,,//,对于年龄以外的属性,直接保存   ,,,obj[支持],=,价值;   ,,},   };      let  person =, new 代理({},,验证器);      时间=person.age  100;      person.age;//, 100   时间=person.age “young",,//,报的错   person.age =, 300,,//,报错

防止内部属性”<代码> \ _ "被外部读写(通常我们以下划线开的头,表示其实内部属性)

var  handler =, {   有才能(目标,,键),{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

JS中ES6代理代理怎么用