code: function (obj) {
                  var t = shared.tracker.getTracker(obj);
                  t.tc().disable++;
                  // Loop old props to find any to delete
                  var oldProps = shared.utils.cloneArray(t.type().props());
                  var newProps = Object.keys(obj);
                  for(var i = 0; i < oldProps.length; i++) {
                      if(!obj.hasOwnProperty(oldProps[i]) || !shared.tracker.isPropTracked(obj, oldProps[i])) {
                          t.addDelete(obj, oldProps[i]);
                      } else {
                          // Remove any old ones for next step
                          var idx = newProps.indexOf(oldProps[i]);
                          newProps[idx] = null;
                      }
                  }
                  // Add any new props
                  for(var i = 0; i < newProps.length; i++) {
                      if(newProps[i] !== null) {
                          t.addNew(obj, newProps[i], obj[newProps[i]]);
                          t.track(obj, newProps[i]);
                      }
                  }
                  if(t.hasChanges()) {
                      t.uprev(obj);
                  }
                  t.tc().disable--;
              }
docs: /*
  Post-processing changes on an object