Выбрать главу

Что почитать

Подробное обсуждение этого противоречия ищите на ветке StackOverflow: http://stackoverflow.com/questions/8859828/.

КОРОТКО О ГЛАВНОМ: что же мне делать?

Мой ответ на этот вопрос будет прост: пользуйтесь здравым смыслом! Я обозначил всего лишь два случая из множества, которые люди обсуждают в связи с темами, касающимися расширения встроенных объектов. По большей части возражения имеют реальные основания. Вам же при этом стоит себя спросить: «Относятся ли эти возражения к моему сценарию?» Смею предположить, что нет.

Лично я никогда не имел проблем при расширении встроенных объектов нужной мне функциональностью. Эту функцию перемешивания я написал много лет назад, и ни один браузер по сей день даже близко не реализовал ее альтернативы. При этом я не жалуюсь. Я тестирую всю добавляемую функциональность и убеждаюсь, что она полноценно работает в интересующих меня браузерах, на которые я нацелен. До тех пор пока вы будете проводить обширное тестирование (для одной или двух последних версий наиболее популярных браузеров), наверняка все будет в порядке.

Если же вы беспокоитесь о будущем вашего приложения, называйте свойства или методы таким образом, чтобы их могло использовать только ваше приложение. Например, шансы, что функция Array.prototype.kirupaShuffle будет введена в какой-либо браузер, стремятся к нулю.

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

Если у вас есть вопросы по расширению объектов или вы просто хотите поговорить о жизни, обращайтесь на форум https://forum.kirupa.com.

Глава 20. Использование классов

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

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

Поехали!

Синтаксис классов и создание объектов

Будем осваивать синтаксис классов дедовским способом — через написание кода. Так как рассмотреть предстоит многое, не будем хвататься за все сразу, а начнем с применения синтаксиса классов при создании объектов. Как вы увидите, здесь замешано множество всего, и нам будет над чем потрудиться.

Создание объекта

Вы можете рассматривать класс как шаблон — шаблон, на который ссылаются объекты при создании. Предположим, что мы хотим создать класс Planet. Максимально простая версия этого класса будет выглядеть так:

class Planet {

}

Мы используем ключевое слово class, сопровождаемое именем, которое мы хотим задать нашему классу. Тело этого класса будет содержаться внутри фигурных скобок { }. Очевидно, что на данный момент класс пуст. Пока это нормально, так как начинаем мы с самого простого.

Для создания объекта на основе этого класса вам всего лишь нужно сделать следующее:

let myPlanet = new Planet();

Мы объявляем имя нашего объекта и используем ключевое слово new для создания (то есть инстанцирования) объекта на основе класса Planet. Рисунок 20.1 демонстрирует наглядно, что именно происходит за кадром.

Рис. 20.1. Внутренний процесс при создании myPlanet

Это представление несколько отличается от того, что мы видели при создании объектов с помощью Object.create(). Разница заключается в создании объекта myPlanet с помощью ключевого слова new. При создании объектов с помощью new происходит следующее:

1. Новый объект имеет тип Planet.