@faleaksey

Инициализация метода через конструктор?

Всем доброго времени! Ниже пример когда и меня интересует, насколько правильно вызывать метод start(точнее его инициализация через constructor)? Насколько это по перфомонсу и не доставит ли это проблем в будущем?
Не bad practice ли ?
class Meetup {
  constructor(param) {
    this.name = param.theme;
    this.location = param.city;
    this.start = this.start();
  }
  start() {
    console.log(this.name + 'Meetup ' + 'is started at ' + this.location);
  }
}

const sdfMeetup = (param) => {
  return new Meetup(param);
}

export default sdfMeetup;


sdfMeetup({
  theme: 'JS',
  city: 'Blr'
});

sdfMeetup({
  theme: 'Angular',
  city: 'Noida'
});
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
Kozack
@Kozack Куратор тега JavaScript
Thinking about a11y
Если у вас есть какая-то логика, которая должна вызываться несколько раз — вынесите её в отдельный метод. Если вызов этой логики обязателен, и экземпляр класса не может работать до того момента как этот метот отработает впервые — вызывайте его в конструкторе.

Пример, когда вызов метода избыточен
class User {
    constructor ({name, age}) {
        this.name = name
        this.age = age
    }

    greet() {
        console.log(`Hi! I'm ${this.name}`)
    }
}

const alex = new User({name: 'Alex', age: 18})
alex.greet() // <- Optional request


Пример, когда вызов метода в конструкторе необходим
class User {
    constructor ({name, age, roles}) {
        this.name = name
        this.age = age
        this.hasAccess = null
        this.setRoles(roles) // <- Require request
    }

    setRoles(roles) {
        if (roles.access) {
            this.hasAccess = true
        } else {
            this.hasAccess = false
        }
    }

    greet() {
        console.log(`Hi! I'm ${this.name}`)
        return this
    }
}

const alex = new User({name: 'Alex', age: 18, roles: {access: true}})
alex.setRoles({access: false}) // <- Optional request
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы