Вход

Просмотр полной версии : Свойство-счетчик в объекте


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
Спасибо за решения!