JS Proxy对象使用的两个案例:校验器和属性私有化

校验器

const target = {
_id: '1024',
name: 'vuejs',
}
// 校验器
const validators = {
name(val) {
return Object.prototype.toString.call(val) === 'string';
},
_id(val) {
return Object.prototype.toString.call(val) === 'number';
}
}
const createValidator = (target, validators) => {
return new Proxy(target, {
_validator: validators,
set(target, propKey, value, proxy) {
let validator = this._validator[propKey](value)
if(validator) {
return Reflect.set(target, propKey, value, proxy)
} else {
throw Error(`无法设置属性为${propKey}的值为${value},类型不匹配`)
}
}
})
}
const targetProxy = createValidator(target, validators)
// targetProxy.name = 1234 // Error: 无法设置属性为name的值为1234,类型不匹配
// targetProxy._id = '1234' // Error: 无法设置属性为_id的值为1234,类型不匹配

属性私有化

const target = {
_id: '1024',
name: 'vuejs',
}
const createProxy = (target) => {
return new Proxy(target, {
get: function(target, propKey, proxy) {
if(propKey[0] === '_') {
throw Error(`${propKey} is privated`)
}
return Reflect.get(target, propKey, proxy)
},
set: function(target, propKey, value, proxy) {
if(propKey[0] === '_') {
throw Error(`${propKey} is privated, can not set ${value}`)
}
return Reflect.set(target, propKey, value, proxy)
}
})
}
const targetProxy = createProxy(target)
// targetProxy._id = 123 // Error: _id is privated, can not set 123
// console.log(targetProxy._id) // Error: _id is privated
posted @   Felix_Openmind  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
*{cursor: url(https://files-cdn.cnblogs.com/files/morango/fish-cursor.ico),auto;}
点击右上角即可分享
微信分享提示