首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >浅拷贝,深拷贝

浅拷贝,深拷贝
EN

Stack Overflow用户
提问于 2022-04-11 10:45:32
回答 1查看 54关注 0票数 0

代码语言:javascript
运行
复制
const Inner = function(Text) {
  this._Text = Text;
  this.Alert = () => {
    alert(this._Text["Message"]);
  }
};
const Outer = function() {
  this.Text = {
    Message: "Hi"
  };
  this.Inner = new Inner(this.Text);
  this.Alert = this.Inner.Alert;
};
const OuterObject = new Outer();
OuterObject.Alert();
OuterObject.Text["Message"] = "Hello";
OuterObject.Alert();

输出: Hi->Hello

代码语言:javascript
运行
复制
const Inner = function(Text) {
  this._Text = Text;
  this.Alert = () => {
    alert(this._Text["Message"]);
  }
};
const Outer = function() {
  this.Text = {
    Message: "Hi"
  };
  this.Inner = new Inner(this.Text);
  this.Alert = this.Inner.Alert;
};
const OuterObject = new Outer();
OuterObject.Alert();
OuterObject.Text = {
  Message: "Hello"
};
OuterObject.Alert();

输出: Hi->Hi

我在Javascript.Then中尝试浅拷贝和深拷贝,我运行了上面的代码。我不明白为什么前者是浅薄的拷贝,后者是深的复制。请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2022-04-11 11:07:39

在第一个代码块中调用new Outer();之后,您的外部this.TextInner中的this._Text都指向内存中的同一个对象,这是您在Outer中创建的对象。

代码语言:javascript
运行
复制
{
  Message: "Hi"
}

这是因为当您将this.Text传递给Inner时,您最终会传递上述对象的引用。因此,this._Text将同一个对象引用到this.Text引用的对象。这意味着当您修改Text对象时,在记录this._Text时也会反映更改,因为Text_Text都引用同一个对象。

第二个代码块也会发生类似的情况--在执行OuterObject.Text = {Message: "Hello"};之前,this._Textthis.Text都引用内存中的同一个对象(就像在第一个示例中所做的那样),但是,当您重新分配OuterObject.Text = {Message: "Hello"};时,您正在内存中创建一个新对象({Message: "Hello"};),并将对该新对象的引用分配给.Text属性,._Text引用的对象({Message: "Hi"})仍然保持不变,因为您所做的只是更新.Text以指向一个新对象,并且没有更改< code >D23引用或对象。

为了在图表中解释,在这两个代码块中,您最初有以下内容:

在您的第一个代码块中,当您执行OuterObject.Text["Message"] = "Hello";时,您正在更新this.Textthis._Text所指向的内存中的一个对象,这意味着当您查看this._Text.Message时,您将看到"Hello",以及与this.Text.Message相同的对象

在第二个代码块中,仍然会出现第一个图/情况,但第二个情况不会发生,相反,当您执行OuterObject.Text = {Message: "Hello"};时,将得到以下结构:

上面,this.Text指向内存中创建的新对象,而this._Text仍然指向旧对象,因为指向this._Text的指针没有改变。因此,日志记录this._Text仍然显示"Hi"

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71826447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档