关于最后例子的一些问题

来源: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回答

快乐动起来呀

2019-06-20

你注释掉 _validator 后面调用会报错,如果没有执行,说明:if (target.hasOwnProperty(key)) 这个地方没通过,你可以调试下。这里传 proxy 的作用是用户对 target 的 set 限制,必须满足 validator 的条件才能修改target,也就是代理的作用,建议你回去看看 proxy 的语法

0
1
目訫
非常感谢!
2020-02-19
共1条回复

ES6零基础教学 解析彩票项目

ES6从零开始,量身设计的迷你案例,让你全面掌握ES6

2579 学习 · 881 问题

查看课程