关于最后例子的一些问题
来源:3-13 Proxy和Reflect

目訫
2019-06-20
{
// 解耦
function validator (target, validator) {
return new Proxy(target, {
// 老师,这里的操作是什么意思,有什么含义吗?我将这步操作注释掉之后并没什么变化啊
_validator: validator,
// 老师,这里传一个proxy参数是做什么用的
set (target, key, value, proxy) {
if (target.hasOwnProperty(key)) {
// 这步操作是什么意思?这不是这个对象的一个值吗?
let va = this._validator[key]
if (va(value)) {
return Reflect.set(target, key, value, proxy)
} else {
throw Error(`不能设置${key}到${value}`)
}
} else {
throw Error(`${key}不存在`)
}
}
})
}
// 这里用到了什么方法?为什么这么做可以校验呢?
const personValidators = {
name (val) {
return typeof val === 'string'
},
age (val) {
return typeof val === 'number' && val > 18
}
}
class Person {
constructor (name, age) {
this.name = name
this.age = age
return validator(this, personValidators)
}
}
const person = new Person('lilei', 30)
console.info(person)
}
以上这些问题还请老师回答一下,十分感谢。
写回答
1回答
-
你注释掉 _validator 后面调用会报错,如果没有执行,说明:if (target.hasOwnProperty(key)) 这个地方没通过,你可以调试下。这里传 proxy 的作用是用户对 target 的 set 限制,必须满足 validator 的条件才能修改target,也就是代理的作用,建议你回去看看 proxy 的语法
012020-02-19
相似问题