属性代理
function proxyObject(row) {
const { id, name, address } = row
const handler = {
get(target, prop, receiver) {
if (prop === 'del') {
return function(propName) {
delete target[propName]
return receiver
}
}
if (prop === 'delAll') {
return function(propNames) {
propNames.forEach(propName => delete target[propName])
return receiver
}
}
if (prop === 'replaceProperty') {
return function (oldName, newName) {
if (Reflect.has(target, oldName)) {
const descriptor = Reflect.getOwnPropertyDescriptor(target, oldName)
Reflect.defineProperty(target, newName, descriptor)
Reflect.deleteProperty(target, oldName)
return receiver
}
return receiver
}
}
return target[prop]
},
}
const obj = new Proxy({ id, name, address }, handler)
return obj
}
// test
const row = { id: 1, name: 'John', address: '123 Main St' }
const obj = proxyObject(row)
console.log(obj.del('address'))
console.log(obj.delAll(['name','address']))
console.log(obj.replaceProperty('address','email'))
数据验证
- 1,set 和 get 方法,来检测对象属性值的合法性。