目录
1、函数实现
const readonlyHandler = {
get(target, prop) {
if (prop === '_is_readonly') return true;
const result = Reflect.get(target, prop);
console.log('拦截到了读取数据了', prop, result);
return result;
},
set(target, prop, value) {
console.warn('只能读取数据,不能修改数据或者添加数据');
return true;
},
deleteProperty(target, prop) {
console.warn('只能读取数据,不能删除数据');
return true;
}
}
function readonly(target) {
if (target && typeof target === 'object') {
if (Array.isArray(target)) {
target.forEach((item, index) => {
target[index] = readonly(item);
});
} else {
Object.keys(target).forEach(key => {
target[key] = readonly(target[key]);
});
}
return new Proxy(target, readonlyHandler);
}
return target;
}
2、函数调用
const proxyUser4 = readonly({
name: '小明',
cars: ['奔驰', '宝马']
});
console.log(proxyUser4.name);
console.log(proxyUser4.cars[0]);
proxyUser4.name = '哈哈';
proxyUser4.cars[0] = '哈哈';
delete proxyUser4.name;
delete proxyUser4.cars[0];