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

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

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


3函数参数的默认值

Proxy可以用于给函数参数设置默认值:

 

function defaultValues(target, defaults) {
  return new Proxy(target, {
    apply: function(target, thisArg, args) {
      args = args.map((arg, index) => arg === undefined ? defaults[index] : arg);
 return target.apply(thisArg, args);
    }
  });}
let add = defaultValues(function(x, y) {
  return x + y;}, [0, 0]);
console.log(add(1, 1)); // 输出 2
console.log(add(undefined, 1)); // 输出 1
console.log(add(1)); // 输出 1

以上仅仅是Proxy能做的事情的一部分。在实际开发中,你可以根据需要灵活使用Proxy。

3.Proxy vs Reflect

在ES6中引入了另一个新的全局对象Reflect,它提供了一组用于执行JavaScript基本操作的方法,例如Reflect.get(),Reflect.set()等。这些方法与Proxy的traps一一对应。这使得Proxy的traps可以使用对应的Reflect方法来执行被拦截的操作:

 

let proxy = new Proxy(target, {
  get: function(target, property) {
    return Reflect.get(target, property);
  }});

 

Reflect的方法有许多优点。

首先,它们总是返回一个期望的值,使得代码更易于理解和调试。其次,它们提供了一种正确处理JavaScript基本操作的方法。例如,使用Reflect.set()可以正确处理设置只读属性的情况。

4.结论

JavaScript Proxy是一个非常强大的工具,它为修改和扩展基本操作提供了可能性。虽然在某些情况下,使用Proxy可能会让代码变得更复杂,但在处理某些复杂问题时,如数据绑定和观察、操作拦截和校验等,它的优势就显现出来了。理解和掌握Proxy可以让你的JavaScript代码更具有扩展性和灵活性。

 

相关文章
|
2月前
|
JavaScript
vue中使用 HotKeys.js 教程(按键响应、快捷键开发)
vue中使用 HotKeys.js 教程(按键响应、快捷键开发)
144 0
|
1月前
|
JavaScript NoSQL 前端开发
|
29天前
|
JavaScript 前端开发 开发者
Vue.js 响应式变革来袭!结合热点技术,探索从 Object.defineProperty 到 Proxy 的奇妙之旅,触动你的心
【8月更文挑战第30天】在 Vue.js 中,响应式系统自动追踪并更新数据变化,极大提升了开发体验。早期通过 `Object.defineProperty` 实现,但存在对新旧属性处理及数组操作的局限。Vue 3.0 引入了 `Proxy`,克服了上述限制,提供了更强大的功能和更好的性能。实践中,可根据项目需求选择合适的技术方案,并优化数据操作,利用懒加载等方式提升性能。
29 0
|
3月前
|
前端开发 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.
50 3
高级前端开发需要知道的 25 个 JavaScript 单行代码
|
2月前
|
JSON JavaScript 数据格式
vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
vue 绘制波形图 wavesurfer.js (音频/视频) 【实用教程】
297 3
|
2月前
|
JavaScript
vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)
vue 农历日期转公历日期(含插件 js-calendar-converter 使用教程)
173 0
|
2月前
|
开发框架 监控 JavaScript
企业级node.js开发框架 【egg.js】 实用教程
企业级node.js开发框架 【egg.js】 实用教程
38 0
|
2月前
命令行加载特效 【cli-spinner.js】 实用教程
命令行加载特效 【cli-spinner.js】 实用教程
25 0
|
2月前
|
JavaScript
文件查询匹配神器 【glob.js】 实用教程
文件查询匹配神器 【glob.js】 实用教程
40 0
|
2月前
|
JavaScript 数据安全/隐私保护
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
node.js 命令行的命令注册和配置工具(最新版) commander.js 实用教程(含自研脚手架的创建流程)
97 0