带你读《现代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代码更具有扩展性和灵活性。