Proxy 与创建私有属性
Proxy - JavaScript | MDN
下图举例用代理实现在获取对象中属性值时实现拦截操作,在获取对象中不存在的属性时自定义返回一个字符串提示。
v// 创建私有属性
const toto = {
name: 'toto',
age: 25,
_secret: '***'
}
const handler = {
get(target, prop) {
if (prop.startsWith('_')) {
throw new Error('Access denied')
}
return target[prop]
},
set(target, prop, value) {
if (prop.startsWith('_')) {
throw new Error('Access denied')
}
target[prop] = value
// set方法返回布尔值
// 以便让我们知道该值是否已被正确设置 !
return true
},
ownKeys(target, prop) {
return Object.keys(target).filter(key => !key.startsWith('_'))
},
}
const totoProxy = new Proxy (toto, handler)
for (const key of Object.keys(proxy1)) {
console.log(key) // 'name', 'age'
}