¿Cuál es la diferencia entre usar Object.create () y usar el operador de asignación?

Aquí están algunos ejemplos.

// 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!'

Yo creo queObject.create() simplemente da ambos puntos al mismo prototipo, mientras que la asignación hace que ambos objetos apunten a la misma ubicación (no solo al prototipo).Pero entonces, ¿por qué se sobrescribe el objeto de datos en el caso 3?

Respuestas a la pregunta(3)

Su respuesta a la pregunta