带你读《现代Javascript高级教程》十六、深入理解Proxy(1)

简介: 带你读《现代Javascript高级教程》十六、深入理解Proxy(1)

十六、深入理解Proxy

在现代JavaScript中,Proxy是一种非常有用的特性,它允许我们在许多常规操作中插入自定义行为。然而,由于其深度和复杂性,很多开发者可能会对如何使用它或它的工作原理感到困惑。在本篇文章中,我们将详细讨论JavaScript Proxy,并通过代码示例演示其使用。

1.Proxy是什么?

在JavaScript中,Proxy是一个特殊的“包装器”对象,它可以用于修改或扩展某些基本操作的行为,比如属性读取、函数调用等。这种修改或扩展的行为是通过所谓的"traps"实现的,这些"traps"定义了如何拦截和改变基本操作。

 

以下是一个简单的例子,显示了如何使用Proxy拦截对象的属性读取操作:

 

let target = {
  name: "target"};
let proxy = new Proxy(target, {
  get: function(target, property) {
    return property in target ? target[property] : "Default";
  }});
console.log(proxy.name); // 输出 "target"
console.log(proxy.unknown); // 输出 "Default"

 

在上面的例子中,当我们尝试从proxy读取不存在的属性时,我们得到了"default",而不是通常的"undefined"。这是因为我们的"get" trap拦截了读取操作,并返回了默认值。

2.Proxy的用途

Proxy有许多用途,下面是一些常见的例子:

1数据校验

Proxy可以用于校验设置对象属性的值:

 

let validator = {
  set: function(target, property, value) {
    if (property === "age") {
      if (!Number.isInteger(value)) {
        throw new TypeError("The age is not an integer");
      }
      if (value < 0 || value > 200) {
        throw new RangeError("The age is invalid");
      }
    }
    target[property] = value;
    return true;
  }};
let person = new Proxy({}, validator);
person.age = 100; // 正常
console.log(person.age); // 输出 100
person.age = "young"; // 抛出 TypeError: The age is not an integer
person.age = 300; // 抛出 RangeError: The age is invalid

2数据绑定和观察

Proxy可以用于实现数据绑定和观察(数据变化的监听):

let handler = {
  set: function(target, property, value) {
    console.log(`propertyissetto{property} is set to {value}`);
    target[property] = value;
    return true;
  }};
let proxy = new Proxy({}, handler);
proxy.name = "proxy"; // 输出 "name is set to proxy"


带你读《现代Javascript高级教程》十六、深入理解Proxy(2)https://developer.aliyun.com/article/1349582?groupCode=tech_library

相关文章
|
4月前
|
机器学习/深度学习 JavaScript 前端开发
JS进阶教程:递归函数原理与篇例解析
通过对这些代码示例的学习,我们已经了解了递归的原理以及递归在JS中的应用方法。递归虽然有着理论升华,但弄清它的核心思想并不难。举个随手可见的例子,火影鸣人做的影分身,你看到的都是同一个鸣人,但他们的行为却能在全局产生影响,这不就是递归吗?雾里看花,透过其间你或许已经深入了递归的魅力之中。
193 19
|
7月前
|
资源调度 JavaScript 前端开发
前端开发必备!Node.js 18.x LTS保姆级安装教程(附国内镜像源配置)
本文详细介绍了Node.js的安装与配置流程,涵盖环境准备、版本选择(推荐LTS版v18.x)、安装步骤(路径设置、组件选择)、环境验证(命令测试、镜像加速)及常见问题解决方法。同时推荐开发工具链,如VS Code、Yarn等,并提供常用全局包安装指南,帮助开发者快速搭建高效稳定的JavaScript开发环境。内容基于官方正版软件,确保合规性与安全性。
6547 24
|
JavaScript
vue中使用 HotKeys.js 教程(按键响应、快捷键开发)
vue中使用 HotKeys.js 教程(按键响应、快捷键开发)
460 0
|
11月前
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
390 2
2024年5月node.js安装(winmac系统)保姆级教程
|
JavaScript 前端开发
js教程——函数
js教程——函数
269 4
|
JavaScript NoSQL 前端开发
|
JavaScript 前端开发 Java
Node.js 教程
10月更文挑战第1天
153 0
|
JavaScript 前端开发 开发者
Vue.js 响应式变革来袭!结合热点技术,探索从 Object.defineProperty 到 Proxy 的奇妙之旅,触动你的心
【8月更文挑战第30天】在 Vue.js 中,响应式系统自动追踪并更新数据变化,极大提升了开发体验。早期通过 `Object.defineProperty` 实现,但存在对新旧属性处理及数组操作的局限。Vue 3.0 引入了 `Proxy`,克服了上述限制,提供了更强大的功能和更好的性能。实践中,可根据项目需求选择合适的技术方案,并优化数据操作,利用懒加载等方式提升性能。
142 0
|
JSON JavaScript 数据格式
vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
1224 3
|
JavaScript
vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)
vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)
523 0

热门文章

最新文章