let info: any = {}
// 直通
let proxy = new Proxy(info, {})
proxy.name = 'test'
console.log(info.name)
// 嵌套
let proxy2 = new Proxy(proxy, {})
proxy2.name = 'test2'
console.log(info.name)
// get
let proxyForGet = new Proxy(info, {
get(target, property) {
if (property === 'name') {
if (property in target) {
return `name: ${target[property]}`
}
return '--'
} else {
return target[property]
}
}
})
console.log(proxyForGet.name)
proxyForGet.name2 = 'name2'
console.log(proxyForGet.name2)
// set
let proxyForSet = new Proxy(info, {
set(target, property, val) {
if (property === 'title') {
target[property] = val + '!!'
}
return true
}
})
proxyForSet.title = 'ok'
console.log(proxyForSet.title)
// ownKeys
info._password = '***'
let proxyOwnKeys = new Proxy(info, {
ownKeys(target) {
return Object.keys(target).filter(key => !key.startsWith('_'));
}
})
for (let key in proxyOwnKeys) console.log('==>' + key);
console.log(`==>>values: ${Object.values(proxyOwnKeys)}`)
console.log(`==>>password: ${proxyOwnKeys._password}`)
// has
let range = {
start: 1,
end: 10
};
range = new Proxy(range, {
has(target, prop:any) {
return prop >= target.start && prop <= target.end;
}
});
console.log(5 in range)
console.log(12 in range)
console.log('a' in range)
Created
May 15, 2022 03:30
-
-
Save MarshalW/9996f8f03d0bcd7f6699c0a17a6a6044 to your computer and use it in GitHub Desktop.
javascript/typescript proxy 使用示例
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment