1 Востаннє редагувалося JackNollan (24.06.2018 19:03:00)

Тема: Запис в функцію конструктор.

Вітання.
Допоможіть зрозуміти як зробити так, щоб коли я додаю значення в art.add і потім виводжу art.list воно не виводило лише останнє значення яке я записав, а виводило всі значення які я записував. Дякую.
Ось мій код:


var arr = [];
class Art {
    constructor() {}
    add(date, amount, currency, product) {
        this.date = date;
        this.amount = amount;
        this.currency = currency;
        this.product = product;
    }
    list() {
        return arr = [this.date, this.amount, this.currency, this.product];
        console.log(arr);
    }
    clear(date) {
        arr.splice(1, 1);
        console.log(this.list());
    }
    total() {
        return this.amount + this.currency;
    }
}


const art = new Art();

art.add('2017-04-25', 2, 'USD', 'Jogurt');
add.push(('2017-03-13', 5, 'EUR', 'Milk'));

console.log(art.list());

console.log(art.total());

2

Re: Запис в функцію конструктор.

Дуже просто - треба зберігати не поточний стан, а всі попередні. Тобто тримати в this масив четвірок [date,amount,currency,product], а не 4 різні змінні, приблизно так:

constructor() {this.values = Array();}
add(date, amount, currency, product) {
        this.values.push([date,amount,currency,product]);
        this.product = product;
    }
clear(date) {
        for(let i = this.values.length-1; i>=0; --i){
             if(this.values[i][0]==date) {
                  this.values.splice(i,1);
             }
        }
}

і т.д.

Подякували: JackNollan, leofun012

3

Re: Запис в функцію конструктор.

І поясніть своєму колезі з http://replace.org.ua/topic/9546/ , чому він неправий.