Guest User

Untitled

a guest
Jun 24th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.91 KB | None | 0 0
  1. class Message {
  2. //Важный момент что мы передадим айди, чтобы потом по этому айди можно было достать элемент
  3. constructor(title, body, author, id) {
  4. this.title = title;
  5. this.body = body;
  6. this.author = author;
  7. this.id = id;
  8. }
  9.  
  10. //функция отображения. По сути месседж знает о принадлежащих ему ансерах. И сначала выводиться меседж а потом
  11. //Все ансеры ему принадлежащие. Но, в форе месседж только вызывает метод рендед у ансера, что позволяет
  12. //распределить это
  13. //Если у тебя есть HTML то просто покрываешь это все тегами и дальше читай в MessageFactory
  14. render() {
  15. let message = `-----\n${this.author}: ${this.title} \n ${this.body}\n----\n`;
  16. let answers = "";
  17.  
  18. if (this.answers !== undefined) {
  19. this.answers.forEach(e => {
  20. answers += e.render() + "\n";
  21. });
  22. }
  23. console.log(message + answers);
  24. //return message + answers;
  25. }
  26.  
  27. //внутри месседжа есть массив ансеров, создаем новый ансер и кладем туда
  28. addAnswer(answer) {
  29. if (this.answers === undefined) this.answers = [];
  30. this.answers.push(answer);
  31. return this.answers;
  32. }
  33. }
  34.  
  35. //Очевидный и понятный метод реализации наследования
  36. class Answer extends Message {
  37. //Полностью совпадает с родительским
  38. constructor(title, body, author, id) {
  39. super(title, body, author, id);
  40. }
  41.  
  42. //Переопределенная реализация рендера в ансере
  43. render() {
  44. return ` | ${this.author} : ${this.body}`;
  45. }
  46. }
  47.  
  48. //Класс (мы его создадим один) который занимается контролированем отображения и управляет добавлением и удалением.
  49. //Мы можем напрямую создать и месседж и ансер, но лучше это сделать через отдельный класс который будет контролировать
  50. //Все эти движения с созданием "напрямую" скрывается что и есть инкапсуляция
  51. class MessageFactory {
  52. constructor() {
  53. this.m_id = 0;
  54. this.messages = [];
  55.  
  56. }
  57.  
  58. //Создали сообщение, поклали в массив
  59. createMessage(title, body, author) {
  60. this.messages.push(new Message(title, body, author, this.m_id));
  61. this.m_id++;
  62. this.render();
  63. }
  64.  
  65. //Задача метода - отображать все месседжи и ансеры. Сначала должен очистить место куда вставляются данные, потом
  66. //запускает рендер всех месседжей (месседжи в свою очередь отрендерят ансеры)
  67. render() {
  68. this.clearHTML();
  69. for (let i = 0; i < this.messages.length; i++) {
  70. this.messages[i].render();
  71. }
  72. }
  73.  
  74. //Тут надо найти div в который ты все пихаешь и очистить содержимое, чтобы потом покласть то что нарендерил
  75. clearHTML() {
  76. clear(); //works fine for console
  77. //TODO: create by yourself
  78. }
  79.  
  80. //по ID ты будешь знать, когда нажмешь на определенный месседж
  81. addAnswerToMessage(title, body, author, id) {
  82. this.getMessageById(id).addAnswer(new Answer(title, body, author));
  83. this.m_id++;
  84. this.render();
  85. }
  86.  
  87. //Пробегаемся по массиву месседжей, который совпал с заданым айди - наш
  88. getMessageById(id) {
  89. for (let i = 0; i < this.messages.length; i++) {
  90. if (this.messages[i].id === id) {
  91. console.log("FINDED", this.messages[i]);
  92. return this.messages[i];
  93. }
  94. }
  95. throw new Error ('ТАКОГО MESSAGE НЕ СУЩЕСТВУЕТ')
  96. }
  97.  
  98. }
  99.  
  100. var factory = new MessageFactory();
  101. factory.createMessage("Hello", "Something, like description", "SirSerje");
  102. factory.addAnswerToMessage("biatch", "not cool", "Roman", 0);
  103. factory.addAnswerToMessage("biatch", "not cool", "Roman", 0);
  104. factory.addAnswerToMessage("hey, dont swear", "hey, dont swear", "Roman", 0);
  105. factory.createMessage("WTF?", "What a hell going on?", "Jiesel");
  106. factory.createMessage("Hi there", "Im trying to run", "Tom");
  107. factory.addAnswerToMessage("biatch", "I've spot you, man!", "Roman", 4);
Add Comment
Please, Sign In to add comment