const readonlyHandler = {
get(target, prop) {
return Reflect.get(target, prop)
},
set(target, prop, val) {
console.error('只读属性,不支持修改')
return true
},
deleteProperty(target, prop) {
console.error('只读属性,不支持删除')
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
}
手写shallowReadonly和readonly
最新推荐文章于 2024-10-07 09:24:46 发布