Classes

by 2 contributors:

This translation is incomplete. Please help translate this article from English.

Это экспериментальная технология, часть предложения Harmony (ECMAScript 6).
Поскольку спецификация этой технологии ещё не стабилизировалась, проверьте таблицу совместимости её использования в различных браузерах. Также обратите внимание, что синтаксис и поведение экспериментальной технологии могут быть изменены в будущих версиях браузеров в соответствии с изменениями в спецификации.

Draft
This page is not complete.

Классы в JavaScript появятся в ECMAScript 6 и будут представлять собой синтаксический сахар существующих в языке прототипных наследований. Синтаксис класса не вводит новую объектно-ориентированную модель наследования. Классы в JS предоставляют гораздо более простой и понятный способ создания объектов.

Определение классов

На самом деле классы - это функции. Поэтому так же как вы определяете функции (function expressions и function declarations), вы можете определять и классы с помощью:

Class declarations

Первый способ определения класса - class declaration. Для этого необходимо воспользоваться ключевым словом class и указать имя класса (в примере - "Polygon").

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

Подъем (hoisting)

Разница между function declarations и class declarations в том, что function declarations совершает подъем (hoisted), в то время как class declarations - нет. Поэтому вначале необходимо объявить ваш класс и только затем работать с ним. Иначе, код вроде следующего не сработает и выдаст ошибку ReferenceError:

var p = new Polygon(); // ReferenceError

class Polygon {}

Class expressions

Второй способ определения класса - class expression. С помощью него можно создавать именованные и безымянные классы. В первом случае имя класса находится в локальной области видимости класса.

// безымянный
var Polygon = class {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};

// именованный
var Polygon = class Porygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
};

Тело класса и метод определения

Тело класса - это часть кода, находящаяся в фигурных скобках ({ }). Здесь вы можете объявлять члены класса, такие как методы и конструкторы.

Strict mode

Тела class declarations и class expressions выполненные в strict mode.

Constructor

Метод конструктор - специальный метод, необходимый для создания и инициализации объектов с помощью класса. В классе может быть только один "конструктор".  Ошибка SyntaxError появится в том случае, если класс будет содержать более одного метода конструктора.

Конструктор может использовать ключевое слово "super" для вызова конструктора родительского класса.

Static methods

 

Sub classing with extends

 

Sub classing built-in objects

 

Super class calls with super

 

Examples

 

Specifications

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
Определение 'Class definitions' в этой спецификации.
Стандарт Initial definition.

Browser compatibility

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support 42.0 Available in the Nightly channel only (since February 2015) ? ? ?
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support Нет Available in the Nightly channel only (since February 2015) ? ? ? 42.0

See also

Метки документа и участники

Contributors to this page: krest88, fscholz
Обновлялась последний раз: krest88,
Скрыть боковую панель