带你读《现代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

相关文章
|
1月前
|
JavaScript 前端开发 网络安全
【网络安全 | 信息收集】JS文件信息收集工具LinkFinder安装使用教程
【网络安全 | 信息收集】JS文件信息收集工具LinkFinder安装使用教程
71 4
|
8天前
|
前端开发 JavaScript 安全
高级前端开发需要知道的 25 个 JavaScript 单行代码
1. 不使用临时变量来交换变量的值 2. 对象解构,让数据访问更便捷 3. 浅克隆对象 4. 合并对象 5. 清理数组 6. 将 NodeList 转换为数组 7. 检查数组是否满足指定条件 8. 将文本复制到剪贴板 9. 删除数组重复项 10. 取两个数组的交集 11. 求数组元素的总和 12. 根据指定条件判断,是否给对象的属性赋值 13. 使用变量作为对象的键 14. 离线状态检查器 15. 离开页面弹出确认对话框 16. 对象数组,根据对象的某个key求对应值的总和 17. 将 url 问号后面的查询字符串转为对象 18. 将秒数转换为时间格式的字符串 19.
18 3
高级前端开发需要知道的 25 个 JavaScript 单行代码
|
16小时前
|
JavaScript 前端开发 索引
JavaScript ES6 新特性探索:Proxy 解锁编程新境界
JavaScript ES6 新特性探索:Proxy 解锁编程新境界
|
16小时前
|
前端开发 JavaScript 安全
解锁 JavaScript ES6:函数与对象的高级扩展功能
解锁 JavaScript ES6:函数与对象的高级扩展功能
|
1月前
|
JavaScript 前端开发
web前端JS高阶面试题(1),高级开发工程师面试
web前端JS高阶面试题(1),高级开发工程师面试
|
19天前
|
Web App开发 资源调度 JavaScript
【保姆级】前端使用node.js基础教程
【6月更文挑战第3天】Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,用于服务器端编程。常用命令包括:安装 Node.js,通过 `node -v` 查看版本;使用 npm(Node 包管理器)进行初始化、安装/卸载包、查看版本和更新;运行 `.js` 脚本;使用 `node inspect` 调试;借助 nodemon 实现自动重启;通过 `npm list` 管理包;
8 0
|
1月前
|
前端开发 JavaScript API
前端 JS 经典:Proxy 和 DefineProperty
前端 JS 经典:Proxy 和 DefineProperty
21 0
|
1月前
|
前端开发 JavaScript
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
JavaScript新科技:PostCSS的安装和使用,2024年最新2024网易Web前端高级面试题总结
|
1月前
|
存储 JavaScript 前端开发
Javascript教程
Javascript教程
18 0
|
1月前
|
JavaScript 前端开发 Java
《手把手教你》系列技巧篇(四十)-java+ selenium自动化测试-JavaScript的调用执行-下篇(详解教程)
【5月更文挑战第4天】本文介绍了如何使用JavaScriptExecutor在自动化测试中实现元素高亮显示。通过创建并执行JS代码,可以改变元素的样式,例如设置背景色和边框,以突出显示被操作的元素。文中提供了一个Java示例,展示了如何在Selenium中使用此方法,并附有代码截图和运行效果展示。该技术有助于跟踪和理解测试过程中的元素交互。
24 0