function deepDataInterceptor(target) {
return new Proxy(target, {
set(target, property, value, receiver) {
let path = [];
let current = target;
while (current!== receiver) {
path.push(property);
current = current[property];
}
path = path.reverse();
console.log(`属性路径: ${path.join('.')}, 新值: ${value}`);
if (typeof value!== 'number') {
throw new Error('新值必须为数字类型');
}
Reflect.set(target, property, value, receiver);
return true;
}
});
}
// 使用示例
let obj = {a: {b: 1}};
let interceptedObj = deepDataInterceptor(obj);
interceptedObj.a.b = 2;
// 输出: 属性路径: a.b, 新值: 2
try {
interceptedObj.a.b = 'three';
} catch (error) {
console.error(error.message);
// 输出: 新值必须为数字类型
}