美文网首页
描述器钩子的使用 defineProperty

描述器钩子的使用 defineProperty

作者: Gary嘉骏 | 来源:发表于2017-09-09 23:11 被阅读0次
    function phone(mes,call) {
        this.mes = mes;
        this.call = call;
      }
      phone.prototype.turn_on = function () {
        console.log('打开');
      };
      phone.prototype.close = function () {
        console.log('关闭');
        return this;
      };
      let hh = new phone('短信','电话');
      var set1 = Object.getOwnPropertyDescriptor(hh,'mes'); //获得当前设置 ,防止覆盖用户原先的设定
      for( var prop in hh) {
         if(set1.configurable) { //若可以重新设置,则添加钩子
             defineReactive(hh,prop,hh[prop]);
        }
      }
      function defineReactive(obj, key, val) {
        var set1 = Object.getOwnPropertyDescriptor(obj,key);
        Object.defineProperty(obj,key,{
          enumerable: true,
          configurable: true,
          set: function(newVal) {
            if(set1.set) {
              set1.set.call(obj,newVal);
            } else {
              val = newVal;
            }
            console.log(456);
          },
          get: function() {
            var value = set1 && set1.get? set1.get.call(obj):val;
            return value;
          }
        });
      }
    
      hh.mes = 666
      console.log(Reflect.ownKeys(hh));
      console.log(Object.getPrototypeOf(hh));
      console.log(Object.getOwnPropertyDescriptors(hh));//返回指定对象所有自身属性(非继承属性)的描述对象。
      console.log(Object.getOwnPropertyDescriptor(hh,'mes'));//返回某个对象属性的描述对象
      console.log(new phone('短信','电话').close());
    

    如果觉得文章对你有点用的话,麻烦拿出手机,这里有一个你我都有的小福利(每天一次): 打开支付宝首页搜索“8601304”,即可领红包。谢谢支持

    相关文章

      网友评论

          本文标题:描述器钩子的使用 defineProperty

          本文链接:https://www.haomeiwen.com/subject/ksaajxtx.html