Как удалить объект из массива изнутри самого объекта; и как передать this в forEach
Данные организованы так.
class Data{ constructor(){ var objects=[]; } fillObjects(some_data){...} deleteObject(id){ this.objects.splice(id,1); } } class Obj{ ... } window.data=new Data(); data.fillObjects(getObjectsFromOutside()); // тут пополняется массив data.objects экземплярами Object Экземпляры Obj из data.objects нужно удалять. Уже реализованный способ - метод Data.deleteObject(id) . Как удалить экземпляр изнутри, т.е. что написать в методе Obj.destructor(), не обращаясь к внешнему объекту? Второй вопрос. В некотором методе класса Data имеются строки this.objects.forEach(function(item,index){ if(someCondition) window.data.deleteObject(index); }); Проблема не только в том, что нельзя вызвать удаление элемента изнутри, но и указан в методе конкретный экземпляр Data, что совершенно криво. Сюда так просто не передаётся this, т.е. this.data.deleteObject(index) выдаст ошибку. Как передать ссылку на текущий объект внутрь forEach ? |
Цитата:
|
A_J,
мысли вслух ... class Data{ constructor(){ this.objects=[]; } fillObjects(some_data){this.objects.push(...some_data.map(a => (a.self = this, a)))} deleteObject(id){ this.objects.splice(id,1); } } class Obj{ constructor(n){ this.n = n; } destructor(){ const id = this.self.objects.findIndex(a => a === this); this.self.deleteObject(id) } } const getObjectsFromOutside = arr => arr.map(n => new Obj(n)) window.data=new Data(); data.fillObjects(getObjectsFromOutside([6,9,0,5])); // тут пополняется массив data.objects экземплярами Obj console.log(data.objects); let elem = data.objects[2]; elem.destructor(); console.log(data.objects); |
Часовой пояс GMT +3, время: 03:51. |