20200917戚权

知识点:

  1. 四大特性

    • value : 实际为属性保存的属性值
    • writable : true/false控制是否可修改当前属性
    • enumerable : true/false控制是否可用for in遍历这个属性
    • configurable : ture/false控制两件事1. 是否可删除该属性2. 是否可修改前两个特性
      注意:configurable一旦改为false,不可逆
  2. 获取一个属性的四大特性var attrs=Object.getOwnPropertyDescriptor(obj,"属性名")

  3. 请保镖,保镖要冒名顶替受保护属性的原属性名

    Object.defineProperty(对象,”原属性名”,{
          // 因为保镖不实际存储属性值,所以保镖没有value属性
    // 又因为writable无法保护属性,才采用的保镖方式,所以保镖也没有writable属性
    // 保镖一请就是一对儿
    // 专门负责从受保护的原属性中获取属性值,交给外人
    get:function(){
    return this._原属性名
    },
    // 专门负责接受外部的新值,判断是否能修改进原属性中保存
    set:function(value){
    // value会自动接住外人给的新值
    if(value符合条件){
    // 如果value符合条件,才将新值value保存到原属性中
    this._原属性名=value
    }else{
    // 否则如果新值不符合要求,则报错,且不修改原属性值
    throw Error(“错误提示”)
    }
    },
    // 保镖后要有 enumerable 和 configurable 两个开关
    enumerable: true, // 保镖要代替原属性抛头露面
    configurable: false, // 保镖不能轻易被删除
    })
    Object.defineProperty(book,"bage",{
    get:function(){
    return this._bage;
    },
    set:function(value){
    // value会自用接住这次要赋的新值
    if(value>=18 && value<=60){
    this._bage=value;
    }else{
    throw Error("年龄超范围!")
    }
    },
    configurable:false,
    enumerable:true
    })

评论