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

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);


});


0

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

0

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

1

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

0

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

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?

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.

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