当前位置: 首页 > 知识库问答 >
问题:

javascript - ES 6 Proxy 和 getter setter 的区别?

关胜
2023-07-05

最新打算开始看 vue 的源码,了解到 vue2 和 vue3 一个大的差距就是替换了使用 getter 为 Proxy。

从MDN上查阅到, proxy 本身的用法也是传入了一个 handler 。表现形式和 getter setter 很类似。
image.png

那为什么还要多此一举来多一层这个代理呢?

能否举一个反例呢?就是 setter 办不到的事情(或者弊端),而 Proxy 可以完成(或者避免)的场景呢?

共有1个答案

朱啸
2023-07-05

比如说,向一个已定义的对象新增属性时候,set是无法拦截到的(因为没有定义对应的set方法),但proxy可以。

const obj = {}

obj.x = 2 // set 无法拦截

--- 

const obj = new Proxy({}, {
    set(target, property, value) {
        // todo something
    }
})

obj.x = 2 // proxy 可以拦截到

再比如说,向数组调用push、pop等会修改数组本身的方法的时候,set同样无法实现拦截,但proxy同样可以。

 类似资料:
  • 本文向大家介绍TypeScript和JavaScript之间的区别,包括了TypeScript和JavaScript之间的区别的使用技巧和注意事项,需要的朋友参考一下 我们知道Typescript和JavaScript都是通常在客户端用于处理服务器请求并在UI上呈现数据的编程语言。但是,它们都是脚本语言,但是Typescript除了Javascript之外还支持其他一些功能,因此我们可以将其声明为

  • 问题内容: PHP和Javascript有什么区别? 我知道一个是服务器端脚本,另一个是浏览器端。但是我要问的是,使用Javascript可以显示警报消息,我也可以简单地使用PHP来执行警报消息,而无需使用任何功能或使用if- else组合。 那么PHP和Javascript是排他性的吗,比如如果我使用一个,那么就不应该使用另一个,或者? 问题答案: 什么是differene黑白PHP和JavaS

  • 本文向大家介绍Java和JavaScript之间的区别。,包括了Java和JavaScript之间的区别。的使用技巧和注意事项,需要的朋友参考一下 众所周知,Java和javascript都是编程语言,并在应用程序开发中使用。但是我们将在下面讨论的两种语言之间存在显着差异。 以下是Java和JavaScript之间的重要区别。 序号 键 爪哇 的JavaScript 1个 语言类型 JavaScr

  • 本文向大家介绍浅谈Ajax和JavaScript的区别,包括了浅谈Ajax和JavaScript的区别的使用技巧和注意事项,需要的朋友参考一下 javascript是一种在浏览器端执行的脚本语言,Ajax是一种创建交互式网页应用的开发技术 ,它是利用了一系列相关的技术其中就包括javascript。 Javascript是由网景公司开发的一种脚本语言,它和sun公司的java语言是没有任何关系的,

  • 问题内容: 这个问题已经在这里有了答案 : JavaScript比较中应使用哪个等于运算符(== vs ===)? (49个答案) 5个月前关闭。 和之间的区别是什么?我也看过和运算符。还有更多这样的运营商吗? 问题答案: 并且是严格的比较运算符: JavaScript具有严格和类型转换相等性比较。为了相等,要比较的对象必须具有相同的类型,并且: 当两个字符串在相同位置具有相同的字符序列,相同的长

  • 我也阅读并试图理解类似于这个问题的其他答案(比如这个问题),但原型遗传的概念对我来说仍然不是很清楚。现在最让我困惑的是,和之间的实际区别是什么?据我所知,是“将一个对象与另一个对象联系起来的内部链接”。但是当我在youtube上看到教程时,它就变得模棱两可了,因为每当他们创建一个对象时,如果他们试图在浏览器的控制台中使用记录它,那么它实际上包含属性,但当我尝试这样做时,它却输出。所以我想知道为什么

  • 问题内容: JavaScript中的&和&&有什么区别? 示例代码: 似乎&&是一个逻辑上的“和”,如果两个都为true,则总是为我提供第二个值。 但是什么是&? (顺便说一下,&&在Python中似乎是“ and”;&在Python中似乎是&。) 问题答案: 是按位AND 该运算符期望 两个数字 并重新调整一个 数字。 如果它们不是数字,则将其强制转换为数字。 注意: 在Javascript中,

  • 问题内容: 我知道有很多这样的话题。而且我知道基础知识:既可以在原始阵列上运行,也可以在新阵列上运行。 就我而言: 这是输出: 我不明白为什么要使用更改to的值。 如果这是一个愚蠢的问题,我感到很抱歉,但是我是这种语言的新手,到目前为止我发现的答案并不令我满意。 问题答案: 他们是不一样的。让我解释一下区别。 :这会遍历列表,并对每个列表成员应用一些有副作用的操作(例如:将每个列表项保存到数据库)