Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Свойство-счетчик в объекте (https://javascript.ru/forum/misc/76244-svojjstvo-schetchik-v-obekte.html)

Tipylja 17.12.2018 13:10

Свойство-счетчик в объекте
 
Здравствуйте. Есть вот такой объект:
function Filter() {
        this.items = [];
    }
 let filter = new Filter();


Далее, свойство items наполняется объектами в цикле:
.......

filter.items.push(obj[item][i]);

........


Получается массив объектов, как я понимаю.
Мне нужно в самом конструкторе объекта, иметь еще одно свойство - count, в котором будет храниться длина массива items. По смыслу это вот так:
function Filter() {
        this.items = [];
        this.count = this.items.length;
    }
 let filter = new Filter();

Но, в таком случае, оно всегда равно 0, по идее потому что оно задается когда этот массив пустой, при создании объекта и дальше не изменяется.
По идее, можно в цикле и этот счетчик плюсовать, там где массив объектами наполняется, но возможно этот подсчет можно сделать автоматическим?:-?

SuperZen 17.12.2018 13:22

[] и так имеет length или count должна быть функцией
или читать шаблоны проектирования %)
function Storage() {
    let store = []
    return {
      get items() {
        return store
      },
      push(item) {
        store.push(item)
      },
      get count() {
        return store.length
      }
    }
  }

  const store = new Storage()
  store.push('one')
  console.log(store.items, store.count)

Alexandroppolus 17.12.2018 13:31

свойство можно использовать

function Filter() {
    this.items = [];
}
Object.defineProperty(Filter.prototype, 'count', { 
  get: function() { return this.items.length; }
});

var f = new Filter();
f.items.push(123);
alert(f.count);

Tipylja 17.12.2018 13:41

Alexandroppolus,
SuperZen
Спасибо за решения!


Часовой пояс GMT +3, время: 02:43.