ES6: что нового в новой версии JavaScript. Часть 3

15.01.2016

Модули

Модули — это, пожалуй, одно из самых долгожданных нововведений в JavaScript. Ни один серьезный JavaScript-проект сегодня не обходится без какой-либо модульной системы — это может быть просто «шаблон модуль» или такие форматы, как AMD или CommonJS. Тем не менее, браузеры до недавнего времени не располагали какой-то модульной системой, т.е. необходимо было настроить сборку или загрузчик модулей AMD или CommonJS с помощью RequireJS, Browserify или Webpack.

Спецификация ES6 содержит и новый синтаксис, и механизм загрузки модулей. Рассмотрим синтаксис модулей ES6:


// lib/math.js

export function sum(x, y) {
   return x + y;
}
export var pi = 3.141593;
// app.js

import { sum, pi } from "lib/math";
console.log('2π = ' + sum(pi, pi));

Как вы можете видеть, модуль может содержать несколько выражений export (в примере выше экспортируется функция и переменная). Выражение import в примере имеет синтаксис, схожий с деструктуризацией — в данном случае явно указывается, что именно импортируется из модуля. Чтобы импортировать весь модуль, можно использовать символ *, а ключевое слово as позволяет задать локальное имя модуля:


// app.js

import * as math from "lib/math";
console.log('2π = ' + math.sum(math.pi, math.pi));

Особенностью модульной системы является экспорт по умолчанию. Для этого используется ключевое слово default. Чтобы импортировать значение по умолчанию, достаточно указать локальное имя:


// lib/my-fn.js

export default function() {
   console.log('echo echo');
}

// app.js

import doSomething from 'lib/my-fn';
doSomething();

Обратите внимание, что выражение import является синхронным, т.е. код модуля не выполнится, пока не загрузятся все зависимости.

Классы

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

В основе классов лежат ключевые слова class и constructor. Небольшой пример:


class Vehicle {
    constructor(name) {
        this.name = name;
        this.kind = 'vehicle';
    }
    getName() {
        return this.name;
     }   
}

// Create an instance
let myVehicle = new Vehicle('rocky');

Обратите внимание, что определение класса отличается от объекта, между членами класса нет запятых.

Чтобы создать экземпляр класса, вы можете воспользоваться ключевым словом new. Чтобы унаследоваться от другого класса, вы можете использовать ключевое слово extends:


class Car extends Vehicle {
    constructor(name) {
        super(name);
        this.kind = 'car'
    }
}

let myCar = new Car('bumpy');

myCar.getName(); // 'bumpy'
myCar instanceof Car; // true
myCar instanceof Vehicle; //true

В производном классе вы можете вызвать конструктор или любой метод базового класса с помощью super:

  • чтобы вызвать конструктор базового класса, можно использовать super().
  • чтобы вызвать другой метод базового класса, можно использовать, например, super.getName().

Символы

Символы — это новый примитивный тип, как Number или String. Вы можете использовать символы для создания уникальных идентификаторов свойств объекта или униальных констант.


const MY_CONSTANT = Symbol();

let obj = {};
obj[MY_CONSTANT] = 1;

Обратите внимание, что пары ключ-значение, заданные с помощью символов, не возвращаются методами Object.getOwnPropertyNames(), Object.keys() или JSON.stringify() и не доступны в цикле for...in. Этим они отличаются от обычных строковых ключей. Получить список символов массива можно с помощью метода Object.getOwnPropertySymbols().

Из-за своей неизменяемой природы символы прерасно работают с const:


const CHINESE = Symbol();
const ENGLISH = Symbol();
const SPANISH = Symbol();

switch(language) {
   case CHINESE:
     // 
      break;
   case ENGLISH:
     // 
      break;
   case SPANISH:
     // 
      break;
   default:
     // 
      break;
}
Рассылка
Подпишитесь на рассылку и получайте дайджест новостей и статей.
Никакого спама!
Подписаться