Допустим, у меня есть класс:
Class Comment {
constructor(user, comment) {
this.username = document.createElement("span");
this.comment = document.createElement("p");
this.body = document.querySelector("body");
}
createComment() {
this.username.textContent = user;
this.commet.textContent = comment;
body.appendChild(this.username);
body.appendChild(this.comment);
}
}
Каждый раз, когда пользователь вводит имя пользователя и комментарий на странице и нажимает кнопку отправки, он создает новый экземпляр класса (новый комментарий!) :
const submitButton = document.querySelector("#submitButton");
submitButton.addEventListener("click", () => {
let addComment = new Comment(userInput.value, commentInput.value);
}
Я хочу сохранить каждый из этих экземпляров в localStorage (по порядку):
exisitingComments = []
localStorage.setItem("existingComments", JSON.stringify(existingComments));
Сохранение переменной, которой назначен экземпляр (addComment), приводит к методу createComment быть неопределенным при загрузке:
window.onload = function() {
existingComments = JSON.parse(localStorage.existingComments);
let i = existingComments.length - 1;
for (; i >= 0; i--) {
existingComments[i].createCommet()
}
}
-> TypeError: existingComments[i].createComment is not a function
Я не могу сохранить имя пользователя и комментарий и создать новые экземпляры класса, потому что имя пользователя и комментарий не должны быть уникальными, и если пользователь хочет удалить комментарий, я не знаю, где он находится в localStorage (если, скажем, было несколько идентичных комментариев).
Единственное, что работает, это каждый раз, когда нажимается кнопка отправки, вызывая функцию для l oop по всему разделу комментариев:
const commentSection = document.querySelector("#commentSection").children;
for (x = 0; x < commentSection.length - 1; x++) {
commentSection[x].setAttribute("id", `comment#{x}`);
}
и эти идентификаторы соответствуют позиции комментария в localStorage.
Кто-нибудь знает лучший способ это можно сделать? Спасибо за миллион заранее !!