这里有几个例子。
// 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!'
我认为Object.create()
只是让两个对象都指向同一个原型(prototype),而赋值使两个对象指向相同的位置(不仅仅是原型(prototype))。
但是为什么在情况 3 中数据对象会被覆盖呢?
最佳答案
由于Object.create()
仅创建浅拷贝,因此嵌套对象仍被引用且未深度复制,请参阅15.2.3.5 (Object.create()
) 和 15.2.2.1 (new Object()
)。
如果你想完全克隆一个对象,请查看 How do I correctly clone a JavaScript object?和类似的问题。
关于javascript - 使用 Object.create() 和使用赋值运算符有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15308545/