Here are a few examples.
// case 1:
var obj1 = {msg : 'Hello'};
var obj2 = obj1;
obj2.msg = "Hi!"; //overwrites
alert(obj1.msg); //=>'Hi!'
// case 2:
var obj1 = {msg : 'Hello'};
var obj2 = Object.create(obj1);
obj2.msg = "Hi!"; //does not overwrite
alert(obj1.msg); //=>'Hello'
// case 3:
var obj1 = {data: { msg : 'Hello'}}
var obj2 = Object.create(obj1);
obj2.data.msg = "Hi!"; //overwrites, Why?
alert(obj1.data.msg); //=>'Hi!'
I think Object.create()
just gives both makes both point to the same prototype, while assignment makes both object point to same location(not just prototype).
But then why is the data object being overwritten in case 3?
var obj2 = Object.create(obj1)
creates an empty(!) object with obj1 as its prototype.
obj2.msg = "Hi!"
adds(!) the property msg to obj2.
obj2.data.msg = "Hi!"
looks for the property data on obj2, but obj2 is empty. So it looks for the property data on the prototype of obj2, which happens to be obj1. Then it changes msg on obj1.data to "Hi".