Как удалить все ссылки на объекты в Javascript? - PullRequest
0 голосов
/ 26 февраля 2019

Учитывая следующий код:

let obj = { data: 1 };
let ref1 = { data: obj };
let ref 2 = [ obj ];

Как я могу удалить obj, это так, что его ссылки также удаляются?(Я имею в виду, что ref1.data === null && ref2.length === 0)

Возможно ли это?

Ответы [ 3 ]

0 голосов
/ 26 февраля 2019

Вы не можете удалить все ссылки на объект.Установка obj=null не будет влиять на его ссылки.Вы можете использовать ключевое слово delete для удаления свойств объекта.

let obj = { data: 1 };
let ref1 = { data: obj };
let ref2 = [ obj ];
delete obj; // no effect
console.log(obj.data); // still have 1
console.log(ref1.data); // still have obj value
obj=null;
console.log(obj)  //null
console.log(ref1.data)  //still have obj value
0 голосов
/ 26 февраля 2019

Где-то внутри среды выполнения javascript есть некоторый фрагмент кода, который отслеживает ссылки на объекты и запускает сборку мусора в памяти, когда все ссылки выходят из области видимости.

Вы ищете что-то похожее, за исключением того, что вы хотите как-то найти все активные ссылки на конкретный объект в определенный момент времени и изменить эту ссылку на ноль.

Я не думаю, что это возможно, если только вы не хотите написать свой собственный интерпретатор javascript.

Но, возможно, если вы создадите резервную копию уровня и объясните, почему вы хотите это сделать, естьспособ достижения вашей цели.

0 голосов
/ 26 февраля 2019

Вы можете удалить свойство из объекта:

let obj = {
  data: 1
};
let ref1 = {
  data: obj
};
let ref2 = [obj];

delete obj.data;

console.log(obj);
console.log(ref1.data);
...