Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

158
Visualizações
Shallow copy, Deep copy

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();

Output: Hi->Hello

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();

Output: Hi->Hi

I was experimenting with shallow copy and deep copy in Javascript.Then I ran the above codes. I don't understand why the former was a shallow copy and the latter a deep copy. Please help me.

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

After you call new Outer(); in your first code block, you end up with both this.Text inside of Outer and this._Text within Inner pointing to the same object in memory, that being the object you created in Outer:

{
  Message: "Hi"
}

This is due to the fact that when you pass this.Text to Inner you end up passing the reference of the above object. As a result, this._Text references the same object to this.Text refers to. This means that when you modify the Text object, the change is reflected also when you log this._Text, because both Text and _Text are referring to the same object.

A similar thing occurs with your second code block - before you perform OuterObject.Text = {Message: "Hello"}; both this._Text and this.Text refer to the same object in memory (as they did in the first example), however, when you reassign OuterObject.Text = {Message: "Hello"};, you are creating a new object in memory ({Message: "Hello"};), and assigning a reference to that new object to the .Text property, the object that ._Text refers to ({Message: "Hi"}) still remains, as all you have done is update .Text to point to a new object, and haven't changed the this._Text reference or object.


To explain in diagrams, in both code blocks, you initially have the following:

memory diagram example of this.Text and this._Text pointing to same object in memory

In your first code block, when you do OuterObject.Text["Message"] = "Hello";, you're updating the one object in memory that both this.Text and this._Text point to, meaning that when you view this._Text.Message you see "Hello" and the same with this.Text.Message:

daigram showing the existing object in memory is updated

In your second code block, the first diagram/situation still occurs but the second doesn't, instead, when you perform OuterObject.Text = {Message: "Hello"}; you get the following structure:

this.Text points to a new object in memory and this._Text points to the old object still

Above, this.Text points to a new object created in memory, whereas this._Text still points to the old object, as the pointer for this._Text isn't changed. So logging this._Text still shows "Hi"

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda