03. Class Methods
Тело класса может содержать только методы, но не данные. Классы не могут иметь статические данные.
Тело класса может содержать функции трех видов:
- constructor() {}- тело конструктора
- static-методы - статические функции, помеченные ключевым словом- staticявляются свойствами самого класса и не записываются в свойство-- prototype.
- Обычный метод будет доступен на всех экземплярах этого класса (записываются в свойство- - prototypeсоздаваемого объекта).
class Foo {
  constructor(prop) {
    this.prop = prop;
  }
  static staticMethod() {
    return "classy";
  }
  prototypeMethod() {
    return "prototypical";
  }
}
let foo = new Foo(123);Методы, объявленные внутри class имеют ряд особенностей:
- Методы являются именно методами, то есть имеет доступ к - superи- this.
- Все методы класса работают в режиме - use strict, даже если он не указан.
- Все методы класса не перечислимы. То есть в цикле - for..inпо объекту их не будет.
- В классах, как и в обычных объектах, можно объявлять геттеры и сеттеры через - get/- set, а также использовать- [field]для свойств с вычисляемыми именами.
- В теле класса нельзя описать его поля, только в конструкторе. Дело в том, что определения в теле класса попадают в его прототип, а там должны быть только функции. 
- Можно объявлять статические функции классов, используя ключевое слово - static.
Class Constructor
Псевдо-функция constructor соответствует поведению функции-конструктора из ES5:
- Функция - constructorзапускается при создании объекта при помощи- new.
- Если конструктор не указан, то используется пустая функция. 
- Как и в обычных конструкторах, - thisв теле конструктора ссылается на создаваемый объект.
- Можно подменить возвращаемое значение, указав явное значение - return.
// Foo is constructor
> Foo === Foo.prototype.constructor
true
> typeof Foo
'function'Static Functions
Метод, объявленный с ключевым словом static объявляется на самой функции конструкторе, а не на прототипе.
Классы не могут иметь полей или статических данных в своем объявлении, но их можно добавить после определения, либо использовать функции-геттеры.
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }
  static get ZERO() {
    return new Point(0, 0);
  }
}
Point.ONE = new Point(1, 1);Last updated
Was this helpful?
