广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScriptProxy基本用法详解
  • 671
分享到

JavaScriptProxy基本用法详解

JavaScriptProxy语法JSProxy 2022-12-30 12:12:05 671人浏览 独家记忆
摘要

目录1.语法2.基本用法3.可消除的Proxy4.Vue为什么要用Proxy重构5.Proxy与defineProperty的对比1.语法 const proxy = new Pro

1.语法

const proxy = new Proxy(target, handle);
  • target,被代理的对象
  • handle,拦截规则

2.基本用法

const obj = {};
const proxy = new Proxy(obj, {
    // target 目标对象;propKey 属性名;receiver 实例本身;
    get: function(target, propKey, receiver) {
        return 10;
    }
})
console.log(proxy.a); // 10
console.log(proxy.b); // 10
console.log(obj.a); // undefined
console.log(obj.b); // undefined

​ 以上代码对obj对象的get操作进行了拦截,任何读取操作都仅会返回10,且该操作只作用在代理对象proxy上,对原对象本身是不起作用的。

ps.若obj对象是不可写及不可配置的,代理对象的返回值要与被代理对象的返回值保持一致;若被代理对象没有配置get方位方法,即get方法是undefined,那么返回值必须是undefined

handle对象的常用方法:

方法描述
hasin操作符捕捉器
get属性读取操作符捕捉器
set属性设置操作符读取器
deletePropertydelete操作符读取器
ownKeysObject.getOwnPropertyNames 方法和
Object.getOwnPropertySymbols 方法的捕捉器。
apply函数调用捕捉器
constructnew操作符的捕捉器

3.可消除的Proxy

​ Proxy有一个唯一的静态方法Proxy.revocable(target, handler),可以用来创建一个可撤销的代理对象,该方法的返回值是一个对象,其结构为: {"proxy": proxy, "revoke": revoke}

  • proxy 表示新生成的代理对象本身,和用一般方式 new Proxy(target, handler) 创建的代理对象没什么不同,只是它可以被撤销掉。
  • revoke 撤销方法,调用的时候不需要加任何参数,就可以撤销掉和它一起生成的那个代理对象。

ps.该方法常用于完全封闭对目标对象的访问。

4.Vue为什么要用Proxy重构

vue3.0之前,双向绑定主要是由defineProperty实现的。而defineProperty这个方法本身其实是存在不足的,比如说对于对象属性增加、数组按下标修改等一下操作无法做到原生实现。虽然Vue有提供相应的手动observer方法,但在使用体验上还是不尽如人意的。而想较于defineProperty针对属性进行拦截,Proxy直接劫持了整个对象,即不需要对特殊的操作做单独处理。

5.Proxy与defineProperty的对比

(1)Proxy作为新标准,浏览器支持良好

(2)Proxy能观察的类型比defineProperty 更丰富

(3)Proxy不兼容IE,也没有polyfill,defineProperty 可以支持到IE9

(4)defineProperty 劫持对象的属性,当新增属性时,需要再次defineProperty;Proxy直接劫持整个对象,不需要额外操作。

(5)defineProperty 在原对象本身进行拦截操作,而Proxy只能在生成的拦截的对象上进行拦截操作。

到此这篇关于javascript Proxy基本用法详解的文章就介绍到这了,更多相关js Proxy内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScriptProxy基本用法详解

本文链接: https://www.lsjlt.com/news/176271.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作