ES6系列之Proxy

本文介绍了ES6的Proxy特性,讲解了Proxy的用途、使用格式、入门示例,特别是get()代理的应用,如允许数组下标为负值,以及在链式运算和处理this指向问题中的应用。
摘要由CSDN通过智能技术生成

目录

ES6之Proxy

它是什么

proxy使用格式

proxy入门示例

理解代理的作用

代理对象与原对象的关系

代理列表 

get() 代理的应用

允许数组下标是负值

链式运算 

this指向问题 


ES6之Proxy

proxy的中文有代理的意思。在其他的程序设计语言中这个单词也具有类似的含义。

它是什么


Proxy是一个构造器。Proxy在目标对象的外层搭建了一层拦截,外界对目标对象的某些操作,必须通过这层拦截。在 js 中构造器的典型特点就是首字母大写,我们通过new Proxy(原对象,{代理列表})格式去创建对象,创建的这个对象我们称之为代理对象。 即:

代理对象 = new Proxy(原对象,{代理列表})

之所以要额外产生这么一个代理对象,好处在于可以保持原对象不变,在代理对象中添加新的功能,或者是改造某些功能。而这个原对象则可以在适当的时机回滚回去。可以与设计模式中的代理模式对比理解。

proxy使用格式


var obj;
var proxyObj = new Proxy(obj, {
    对obj的操作1: 函数1,
    对obj的操作2: 函数2,
    ...
    
})

obj 参数表示所要拦截的目标对象,{} 参数是一个对象,用来定制拦截行为

proxy入门示例


var obj = {name:'fan',age:34}
console.info(obj.name)
 

var proxyObj = new Proxy(obj,{
    get:function(target,key,receiver){console.info(target,key,receiver); return 'no'} 
})

console.info(proxyObj.name)
console.info(proxyObj.abc)

proxyObj.name    // no
proxyObj.abc    // no

解释如下:

  • proxxy对象是在obj对象的基础之上创建的一个新对象。
  • proxyObj.name是要去获取proxy对象的name属性。.操作符会自动去调用get()方法。这一点非常重要当然。我们平时使用.操作时,是没有感知到这一点的。
  • 在new Proxy的第二个参数中,明确设置了get的方法:当访问proxyObj的任意属性时,输出target,key,receiver的值,并统一返回no。所以proxyObj.name和proxyObj.abc都会得到no。
  • get函数中的三个参数:target,key,receiver。 target就是原对象obj, key是当前的属性名;receiver是代理对象。你可以在get方法中做任意的自定
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YD小刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值