gpt4 book ai didi

javascript - 使用 Object.create() 和使用赋值运算符有什么区别?

转载 作者:行者123 更新时间:2023-11-28 11:17:18 26 4
gpt4 key购买 nike

这里有几个例子。

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com