При переписывании ранее написанного кода понадобилось держать в памяти все экземпляры класса. Все экземпляры класса хранятся как статическое свойство (строка *) (если можно его так назвать) в виде массива, который пополняется новым элементом при создании нового экземпляра класса. Код имеет следующий вид:
class Child {
constructor(name) {
this.name = name;
(Child.__instances__ = Child.__instances__ || []).push(this); // *
}
}
class Doughter extends Child {
constructor(name) {
super(name);
}
}
class Son extends Child {
constructor(name) {
super(name);
}
}
class DifferentClass {
constructor() {
}
initializeChildren() {
this.son = new Son("Ваня");
this.doughters = [new Doughter("Маня"), new Doughter("Аня")];
}
removeVanya() {
console.log("Ваня помирает");
this.son = null;
}
}
let obj = new DifferentClass();
obj.initializeChildren();
obj.removeVanya();
console.log(Child.__instances__);
Если выполнить этот код, то можно увидеть, что, даже не смотря на то, что в объекте obj
свойства son
больше нет, то все равно данный экземпляр остался в массиве __instances__
. А, как известно из уже данных ответов, экземпляр класса существует ровно до тех пор, пока на него хотя бы откуда-то ссылаются.
Я решил пойти по пути наименьшего сопротивления и напрямую удалить нужный (точнее ненужный больше) элемент, что, по понятным причинам, успехом не увенчалось:
removeVanya() {
console.log("Ваня помирает");
Child.__instances__[this.son] = null;
this.son = null;
}
Собственно, вопрос в том и состоит: как удалить нужный элемент в массиве __instances__
, чтобы больше нигде не содержалось этого экземпляра?
поле __instances__
- является массивом. Для удаления элемента из массива можно применить метод splice. Для этого нужно знать индекс удаляемого элемента. Определить индекс можно с помощью метода indexOf
В итоге функция удаления может принять вид:
removeVanya() {
console.log("Ваня помирает");
var childIndex = Child.__instances__.indexOf(this.son);
if(childIndex != -1)
Child.__instances__.splice(childIndex,1);
this.son = null;
}
В текущем же коде, при вызове Child.__instances__[this]=null
идет преобразование this
в строку, скорее всего [Object object]
, и присваиванию в одноименное свойство в массиве значения null
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите переделать скрипт чтоб результат выводился так ЧАС:МИНУТ:СЕК
при каждом клике добавлять елементу красный цвет, когда все елементы будут красного цвета, то по одному клику с конца возвращать елеметам...