访问器只是对单个属性进行控制和校验
let obj{
name = 'haha'
set name(value) {
if (value !== '') return this.name = value
}
get ....
}
obj.name('value')//直接进入到访问器中
proxy 是对整个对象进行控制
let data = {name: 'haha'}
let proxya = new proxy(data, {
get(obj, propty) {
return obj[propty] // 返回name
}
set(obj, propty, value) {
obj[propty] = value // 赋值
return true
}
})
proxya.name = '111'
console.log(proxya.name)
// 111
proxy还可以对函数进行控制;
proxy对数组的控制(数组中title超过5个字符显示…)
let data = [
{name: '哈哈哈哈哈啊的哀伤的嗷嗷', age: 12},
{name: 'if空间阿四大皆空收不到阿接受的',age: 90}
]
let proxya = new Proxy(data, {
get(array, key) {
const name = array[key].name
const len = 5
array[key].name.length > len ? name.substr(0, len) + '.'.sepeat(3) : name
return array[key]
}
})
console.log(proxya[2])
// 哈哈哈哈哈...