js庇护内部数据的三种体式格局

js中三种完成私有化内部数据的体式格局

  1. 经由过程暴露set和get两个大众api的体式格局,经由过程这两个api对内部数据举行操作和庇护,划定规矩能够写在get和set要领中

    function Person = {
      var data = {
        name: 'es3',
        sex: 'female',
        age: 12
      };
      this.get = function (key) {
        return data[key];
      }
      this.set = function (key, value) {
        if (key !== 'sex') {
          data[key] = value;
        }
      }
    };
    var person = new Person();
    console.table({
      name: person.get('name'),
      sex: person.get('sex'),
      age: person.get('age')
    });// name: 'es3', sex: 'female', age: 12
    person.set('sex', 'male'); // person.get('sex') === 'female' 对set做了推断,所以设置没用,如许就经由过程定义实例的 set和get体式格局来庇护 内部的data变量
  2. 直接运用 defineProperty对数据属性举行限定

    // 不能设置划定规矩,哪一种状况哪些属性能够读写,运用defineProperty就搞不定
    var Person = {
      name: 'es3',
      sex: 'female',
      age: 12
    };
    Object.defineProperty(Person, 'sex', {
      writable: false,
      value: 'female'
    });
    Person.sex = 'male'; // Person.sex === female; 会失利,严厉形式会报错。
  3. 运用 Proxy 对象代办

    var Person = {
      name: 'es3',
      sex: 'female',
      age: 12
    };
    let person = new Proxy(Person, {
      get(target, key) {
        // target就是 Person, key就是属性,这里也能够定义划定规矩
        return target[key];
      },
      set(target, key, value) {
        // 能够在这里举行种种划定规矩设置
        if (key !== 'sex') {
          target[key] = value;
        }
      }
    });
    person.sex = 'male'; // 不起作用
    原文作者:JinsongChai
    原文地址: https://segmentfault.com/a/1190000017578576
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞