Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.12.2018, 13:10
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Свойство-счетчик в объекте
Здравствуйте. Есть вот такой объект:
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, по идее потому что оно задается когда этот массив пустой, при создании объекта и дальше не изменяется.
По идее, можно в цикле и этот счетчик плюсовать, там где массив объектами наполняется, но возможно этот подсчет можно сделать автоматическим?
Ответить с цитированием
  #2 (permalink)  
Старый 17.12.2018, 13:22
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

[] и так имеет 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)
Ответить с цитированием
  #3 (permalink)  
Старый 17.12.2018, 13:31
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

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

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);
Ответить с цитированием
  #4 (permalink)  
Старый 17.12.2018, 13:41
Аспирант
Отправить личное сообщение для Tipylja Посмотреть профиль Найти все сообщения от Tipylja
 
Регистрация: 17.04.2017
Сообщений: 72

Alexandroppolus,
SuperZen
Спасибо за решения!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отслеживать bottom у элемента и менять свойство у класса? INSIDER73 Events/DOM/Window 1 24.04.2017 22:25
Динамический объект в объекте Аарон Общие вопросы Javascript 11 27.03.2014 00:00
как добавить свойство объекта в объект в объекте ? %) mitiya Общие вопросы Javascript 1 07.10.2012 14:46
IE не видит свойство clientX при вызове события на объекте Alegator Элементы интерфейса 3 08.05.2012 12:25
если (свойство css == 2) свойство css = 1; funkypublic Events/DOM/Window 1 09.06.2010 17:39