Saya tahu objek dilewatkan dengan referensi dalam javascript. jadi ketika saya memutasi objek di beberapa fungsi lain maka itu harus tercermin dalam objek awal, yang bukan merupakan kasus di sini, saya mungkin kehilangan sesuatu, alangkah baiknya jika seseorang dapat membantu. di sini di fungsi modifikasi saya mengubah objek obj1 tapi tetap saja, itu menunjukkan objek awal.

Kode

  obj1 ={
      b:{
        c:'c'
      },
      d:{
        g:{
          k:'k'
        }
      }
    }

let modify = (obj1) => {
  obj1 = obj1.b ;
}

console.log(obj1);
modify(obj1);
console.log(obj1);

Keluaran

//output of console1
        [object Object] {
      b: [object Object] {
        c: "c"
      },
      d: [object Object] {
        g: [object Object] { ... }
      }
    }

//output of console2
    [object Object] {
      b: [object Object] {
        c: "c"
      },
      d: [object Object] {
        g: [object Object] { ... }
  }
}
1
Pooja Kushwah 10 Januari 2021, 21:41

3 jawaban

Jawaban Terbaik

Anda tidak mengubah objek asli Anda, Anda hanya mengakses propertinya:

let obj1 = {
a: 1,
b: 2
}

obj1 = obj1.b ;
console.log(obj1);
let obj1 = {
a: 1,
b: 2
}

console.log(obj1)
let obj2 = obj1;
obj2.c = 3;
console.log(obj1);
0
sonEtLumiere 10 Januari 2021, 18:56

Apa yang dilakukan kode Anda adalah mengubah referensi pada obj1 alih-alih mengubah sesuatu di objek yang menjadi referensi jika merujuk.. Coba ganti sesuatu di objek seperti kode yang dimodifikasi di bawah ini.

 obj1 ={
      b:{
        c:'c'
      },
      d:{
        g:{
          k:'k'
        }
      }
    }

let modify = (obj1) => {
  obj1.d = obj1.b ;
}

console.log(obj1);
modify(obj1);
console.log(obj1);
1
Tycho 10 Januari 2021, 18:58

obj1 = obj1.b tidak mengubah apa pun karena hanya menetapkan ulang obj1 dalam lingkup modify(). Namun, setiap perubahan yang Anda buat pada obj1, seperti obj1.b.c='not c' akan mengubah objek aslinya.

Berikut adalah contoh yang mudah-mudahan menunjukkan hal ini.

obj1 = {b:2}
obj2 = obj1
obj1 = 2
console.log(obj2);
0
Ted Brownlow 10 Januari 2021, 18:46