定义
Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。
语法
const p = new Proxy(targe, handler)
参数
-
target: 要使用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)
-
handler: 一个通常以函数作为属性的函数分别定义了在执行各种操作时,代理p的行为。
示例
const handler = {
get: function (obj, prop) {
return prop in obj ? obj[prop] : 107
}
}
const p = new Proxy({}, handler)
p.a = 1
p.b = undefined
const p = new Proxy({}, handler)
p.a = 1
p.b = undefined
console.log(p.a, p.b) // 1, undefined
console.log('c' in p, p.c) // false, 37
通过代理, 你可以轻松地验证向一个对象的传值
let validator = {
set: function (obj, prop, value) {
if (prop === 'age') {
if (!Number.isInteger(value)) {
throw new TypeError('The age is not an integer')
}
if (value > 200) {
throw new RangeError('The age seems invalid')
}
}
obj[prop] = value
return true
}
}
let person = new Proxy({}, validator)
person.age = 100 // true
person.age = 'young' // The age is not an integer
person.age = 300 // The age seems invalid
网友评论