Как лучше и правильно написать js OOP код?

Немного почитал , посмотрел ООП по js. Попробовал сделать небольшой пример кода. Правильно ли так писать? Можно ли совмещать простые, разные функции с классами и т.д. как в моем коде, или совсем плохо я уже написал? Можете подсказать что может не так написал, или что то добавить для простоты?

Еще чуть вопросов. Если у меня 3 разных паб-окна, то можно написать все методы в одном классе или написать только главные функции (открыть,закрыть) и уже наследовать его для каждого нового класса с новыми методами?

class PupMenu {
   constructor(pubuP, classActive) {
      this.pubuP = pubuP;
      this.classActive = classActive;
   }

   exit() {
      //ЗАКРЫВАЕТ ОКНО
   }

   open() {
      //ОТКРЫВАЕТ ОКНО
   }

   slideLeft() {
      //Переключить фото назад
   }
   slideRigth() {
      //Переключить фото вперед
   }

   sendRequest() {
      //Отправить сообщения
   }
}

const btn1 = document.querySelector('.btn1')
const btn2 = document.querySelector('.btn2')
const btn3 = document.querySelector('.btn3')

const pub1 = document.querySelector('.pub1')
const pub2 = document.querySelector('.pub2')
const pub3 = document.querySelector('.pub3')

const arrowLeft = document.querySelector('.arrowLeft')
const arrowRigth = document.querySelector('.arrowRigth')

const send = document.querySelector('.send')

let pupWindowOne = new PupMenu(pub1, 100)
let pupWindowTwo = new PupMenu(pub2, 400)
let pupWindowThree = new PupMenu(pub3, 40)

btn1.addEventListener('click', () => {
   pupWindowOne.open()
})

btn2.addEventListener('click', () => {
   pupWindowTwo.open()
})

btn3.addEventListener('click', () => {
   pupWindowThree.open()
})

arrowLeft.addEventListener('click', pupWindowTwo.slideLeft)

arrowRigth.addEventListener('click', pupWindowTwo.slideRigth)

function sendMs(e) {
   if (e.target...) {
      pupWindowThree.sendRequest()
   }
}

Ответы (1 шт):

Автор решения: Daniil Loban

Я бы делал код примерно таким (его еще можно улучшить - cделать короче и гибче):

class PupMenu {
   constructor(options) {
      const {btnClass, pubClass, send, classActive} = options
      this.classActive = classActive;
      this.btn = document.querySelector(btnClass)
      this.pub = document.querySelector(pubClass)
      this.send = send;
      btn.addEventListener('click', () => {
         this.open()
      })
   }
   exit() {/*ЗАКРЫВАЕТ ОКНО*/}
   open() { /*ОТКРЫВАЕТ ОКНО*/}
   slideLeft() {/*Переключить фото назад */}
   slideRigth() {/*Переключить фото вперед*/}
   sendRequest() {/*Отправить сообщения */}
}

const send = document.querySelector('.send')

let pupWindowOne = new PupMenu({
   buttonClass:'.btn1',
   pubClass: '.pub1',
   send,
   classActive: 100 
})

let pupWindowTwo = new PupMenu({
    buttonClass: '.btn2',
    pubClass: '.pub2', 
    send,
    classActive: 400
 })

let pupWindowThree = new PupMenu({
   buttonClass:'.btn3',
   pubClass: '.pub3',
   send,
   classActive: 40
})

const arrowLeft = document.querySelector('.arrowLeft')
const arrowRigth = document.querySelector('.arrowRigth')
arrowLeft.addEventListener('click', pupWindowTwo.slideLeft)
arrowRigth.addEventListener('click', pupWindowTwo.slideRigth)

function sendMs(e) {
   if (e.target...) {
      pupWindowThree.sendRequest()
   }
}

по второй части вопроса: https://javascript.info/static-properties-methods

→ Ссылка