Чем отличаются свойства класса определенные в конструкторе от свойств вне конструктора JS?

В JavaScript, свойства класса можно определить как внутри конструктора, так и вне конструктора. Вот основные различия между ними:

  1. Свойства, определенные в конструкторе:
  • Являются приватными для экземпляра класса. Это означает, что каждый экземпляр класса будет иметь свою собственную копию этих свойств.
  • Инициализируются во время создания нового экземпляра класса с помощью ключевого слова this.
  • Могут быть изменены и обращены к непосредственно из методов класса.
class MyClass {
  constructor(prop1, prop2) {
    this.prop1 = prop1;
    this.prop2 = prop2;
  }
}
  1. Свойства, определенные вне конструктора:
  • Являются общими для всех экземпляров созданных из класса. Это означает, что все экземпляры будут использовать одну и ту же копию этих свойств.
  • Обычно определяются с использованием ключевого слова static перед объявлением свойства.
  • Не могут обращаться к ключевому слову this, так как они не относятся к конкретному экземпляру, а к самому классу.
class MyClass {
  static staticProp = 'static property';
}

Итак, основное различие заключается в том, что свойства, определенные в конструкторе, являются уникальными для каждого экземпляра, в то время как свойства, определенные вне конструктора, являются общими для всех экземпляров класса. Выбор между этими подходами зависит от конкретной задачи и требований к структуре вашего класса.