Object.defineProperty之observe實現

對數據對象的屬性批量劫持設置:javascript

<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>

後續... ...java

相關文章
相關標籤/搜索