手写shadowReadonly和readonly
const readonlyHandler = {
get(target,prop){
const result = Reflect.get(target,prop)
console.log(’拦截到了读取数据‘,prop,result);
return result
}
set(target,props,value){
console.log('只能读取数据,不能修改数据或者添加数据')
return true
}
deleteProperty(target,prop){
console.log('只能读取数据,不能删除数据')
return true
}
}
function shallowReadonly(target) {
//判断当前的数据是不是对象或者数组
if(target && typeof target === 'object'){
return new Proxy(target,readonlyHandler)
}
return target
}
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
}