关键词:proxy set 拦截器
- 可以拦截数组变化
Proxy
可以有效地拦截数组的变化。当对数组进行各种操作,如修改元素、添加或删除元素等,Proxy
都能够捕获这些操作并进行拦截。
- 拦截数组的读取和设置操作
-
对于数组元素的读取和设置操作,可以通过
get
和set
拦截器来实现。 -
get
拦截器示例:- 假设我们要拦截对数组元素的读取操作,以记录哪些元素被访问了。
1let array = [1, 2, 3]; 2let proxyArray = new Proxy(array, { 3 get(target, property, receiver) { 4 console.log(`正在读取数组元素${property}`); 5 return target[property]; 6 }, 7}); 8let element = proxyArray[1];
- 在这个例子中,当通过
proxyArray[1]
读取数组元素时,get
拦截器会被触发。它会先打印出正在读取数组元素1
,然后返回数组中索引为1
的元素(即2
)。
-
set
拦截器示例:- 假如我们想要拦截对数组元素的设置操作,比如限制数组元素的取值范围。
1let array = [1, 2, 3]; 2let proxyArray = new Proxy(array, { 3 set(target, property, value, receiver) { 4 if (value < 0) { 5 throw new Error("数组元素不能小于0"); 6 } 7 target[property] = value; 8 return true; 9 }, 10}); 11proxyArray[0] = -1;
- 这里,当尝试将
proxyArray[0]
设置为-1
时,set
拦截器会被触发。由于-1
小于0
,会抛出一个错误数组元素不能小于0
。
-
- 拦截数组的方法调用
-
数组有许多方法,如
push
、pop
、shift
、unshift
、splice
等。可以通过Proxy
的apply
拦截器来拦截这些方法的调用。 -
apply
拦截器示例:- 假设我们要记录数组的
push
方法的调用情况。
1let array = [1, 2, 3]; 2let proxyArray = new Proxy(array, { 3 apply(target, thisArg, argumentsList) { 4 if (target.push === argumentsList[0]) { 5 console.log("正在调用数组的push方法"); 6 } 7 return target.apply(thisArg, argumentsList); 8 }, 9}); 10proxyArray.push(4);
- 在这个例子中,当调用
proxyArray.push(4)
时,apply
拦截器会被触发。它会先打印出正在调用数组的push方法
,然后执行正常的push
操作,将4
添加到数组中。
- 假设我们要记录数组的
-
个人笔记记录 2021 ~ 2025