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?