zoukankan      html  css  js  c++  java
  • Object.defineProperty之observe实现

    对数据对象的属性批量劫持设置:

    <script type="text/javascript">
      function observe(data){
        if(!data || typeof data !== 'object'){
          return;
        }
    
        Object.keys(data).forEach(function(key){
          // value 而不是直接用data[key]: defineProperty时,data[key]会导致死循环
          var value = data[key];
          observe(value);
          Object.defineProperty(data,key,{
            enumerable: true,
            configurable: true,
            get: function() {
                return value;
            },
            set: function(newVal) {
                value = newVal;
                console.log('prop(' + key + ') has been obsered, value: ' + newVal.toString() );
            }
          });
        });
      }
    
      var json = {
            addr1: {
                city: ''
            },
            addr2: ''
        };
       observe(json);
       json.addr1.city = '北京市海淀区'; // prop(city) has been obsered, value: 北京市海淀区
       json.addr2 = '上海市外滩';  // prop(addr2) has been obsered, value: 上海市外滩
      </script>

    后续... ...

  • 相关阅读:
    awk书上练习
    矩阵运算
    从最大似然到EM算法浅解
    numpy 练习
    python lxml教程
    pycharm快捷键
    python正则表达式教程
    三门问题
    Solr本地服务器搭建及查询
    git简单使用
  • 原文地址:https://www.cnblogs.com/xtreme/p/10032065.html
Copyright © 2011-2022 走看看