title: JavaScript, overwrite object without losing reference
body: <p><strong>Application</strong></p>
  
  <p>I am working on a simple web application that is built on top of AngularJS. The application should be able to work offline as well as online. When the user is offline, the changes to the data is stored locally. Therefore, the id's that is used within this application in offline mode is only temporary id's, they get replaced when uploaded to the server</p>
  
  <p><strong>Problem</strong></p>
  
  <p>The data that are used in the application consists of complex objects (with relations/references to other objects). When i am saving to the server, i wanted the views to get updated with the new "real" id's.
  However, since JavaScript works with objects as references im not able to do what i want to: <code>$scope.data = newdata</code>
  This is not overwriting $scope.data but creates a new object. The old reference to the old data is still there.</p>
  
  <p><strong>Simplified example</strong></p>
  
  <pre><code>var x = {id: 1, name: "myObject"}
  var c = x    // c = {id: 1, name: "myObject"}
  x = {id: 2, name: "myNewObject"} 
  // c = {id: 1, name: "myObject"}
  </code></pre>
  
  <p>As you can see, c is still a reference to the old object. In practice, this causes that my view isn't updated with new data since it's still bound to the old data.
  What i need to is to overwrite the properties of, in this example, x. I need to do this recursively since my real objects are complex, however it shouldn't enter any circular references, since this will probably cause stack overflow. If i am overwriting a with b and a has properties that b hasn't got, those properties should be removed.</p>
  
  <p><strong>What i need</strong></p>
  
  <p>I need some sort of function that overwrites all properties in a (old object) with the properties in b (new object). All properties that exists in a but not in b should be removed.</p>