Przerobienie kodu, aby po kliknięciu dodawał dane do istniejącej tablicy

2018-12-11 21:10
0

Witam

Jak przebić ten kod aby za każdym razem po kliknięciu nie nadpisywał tablicy i nie tworzył nowej lecz push'ował do istniejącej?

class Book {

    constructor(title, author){

        this.title = title;
        this.author = author;
        this.data = [];
    }
}

Book.prototype.addData = function(title, author) {

    let obj = {title, author};

    this.data.push(obj);

    console.log(this.data);

}

button.addEventListener('submit', function(e) {

   e.preventDefault();

    const title = document.getElementById('title').value;
    const author = document.getElementById('author').value;

    const book = new Book(title, author);

    book.addData(title, author);

});
edytowany 1x, ostatnio: furious programming, 2018-12-11 22:03

Pozostało 580 znaków

2018-12-11 21:56
0

Klasa Book ma reprezentować pojedynczą książkę czy zbiór książek?


edytowany 1x, ostatnio: Patryk27, 2018-12-11 21:56

Pozostało 580 znaków

2018-12-11 22:05
0

Pojedynczą. To ma być prosta ToDo lista z dodawaniem książek gdzie każda ma być z tablicy.

Pozostało 580 znaków

2018-12-11 22:07
1

Ok, po co zatem w pojedynczej książce masz tablicę data?


Pozostało 580 znaków

2018-12-11 22:44
0

Rzeczywiście. W takim razie utworzyć ją w prototype?

Pozostało 580 znaków

2018-12-11 23:03
0

Zależy co chcesz zrobić. Jakie jest przeznaczenie tej klasy? Jak chcesz ją używać? Po co jest data?

  const book = new Book(title, author);
  book.addData(title, author);

to sprawia wrażenie jakiegoś code smell. Czemu ręcznie wywołujesz metodę addData z takimi samymi danymi?


((0b10*0b11*(0b10**0b101-0b10)**0b10+0b110)**0b10+(100-1)**0b10+0x10-1).toString(0b10**0b101+0b100);
edytowany 1x, ostatnio: LukeJL, 2018-12-11 23:04

Pozostało 580 znaków

2018-12-12 07:58
1

Najważniejsza sprawa: książka powinna trzymać tylko i wyłącznie swój własny stan - czyli docelowo Twój kod powinien wyglądać tak:

const books = [];

books.push(new Book('It', 'Stephen King')):
books.push(new Book('Nineteen Eighty-Four', 'George Orwell'));

console.log(books);

Lub, nieco lepiej, tak:

const library = new Library(); // Library lub BookCollection lub cokolwiek innego, co uważasz za stosowne

library.addBook(new Book('It', 'Stephen King')):
library.addBook(new Book('Nineteen Eighty-Four', 'George Orwell'));

const stephenKingBooks = library.getBooksByAuthor('Stephen King');
console.log(stephenKingBooks);

Druga wersja (z dedykowaną klasą Library) jest lepsza, ponieważ wtedy możesz utworzyć w niej pomocnicze metody typu getBooksByAuthor, których wykorzystanie nie jest tak proste w przypadku zwyczajnej tablicy.


edytowany 1x, ostatnio: Patryk27, 2018-12-12 07:58

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0