Следующие пункты суммируют то, что вы должны были выучить, прочитав эту книгу (и исследуя примеры кода). Прочитайте каждое резюме, и если вы не понимаете, что говорится, вернитесь к теме в книге.
- Объект состоит из именованных свойств, которые хранят значения.
- Большинство всего в JavaScript может действовать как объект. Сложные значения являются объектами, а примитивные значения могут рассматриваться как объекты. Вот почему вы можете услышать, как люди говорят, что все в JavaScript — это объект.
- Объекты создаются путем вызова функции конструктора с
newключевым словом или с использованием сокращенного литерального выражения. - Функции конструктора являются объектами (объектами
Function()), поэтому в JavaScript объекты создают объекты. - JavaScript предлагает девять собственных функций конструктора:
Object(),Array(),String(),Number(),Boolean(),Function(),Date(),RegExp()иError(). КонструкторыString(),Number()иBoolean()имеют двойное назначение: a) примитивные значения и b) обертки объектов при необходимости, так что примитивные значения могут действовать как объекты. - Значения
null,undefined,"string",10,trueиfalseявляются примитивными значениями, без сущности объекта, если не рассматриваются как объект. - Когда функции конструктора
Object(),Array(),String(),Number(),Boolean(),Function(),Date(),RegExp()иError()вызываются с использованиемnewключевого слова, объект создан, который известен как «сложный объект» или «ссылочный объект». -
"string",10,trueиfalseв своих примитивных формах не имеют качеств объекта, пока не будут использованы в качестве объектов; затем JavaScript за кулисами создает временные объекты-оболочки, чтобы такие значения могли действовать как объекты. - Примитивные значения сохраняются по значению, а при копировании буквально копируются. С другой стороны, значения сложных объектов сохраняются по ссылке, а при копировании — по ссылке.
- Примитивные значения равны другим примитивным значениям, когда их значения равны, тогда как сложные объекты равны только тогда, когда они ссылаются на одно и то же значение. То есть комплексное значение равно другому комплексному значению, когда оба ссылаются на один и тот же объект.
- Из-за природы сложных объектов и ссылок объекты JavaScript имеют динамические свойства.
- JavaScript является изменяемым, что означает, что нативными объектами и пользовательскими свойствами объектов можно манипулировать в любое время.
- Получение / установка / обновление свойств объектов осуществляется с помощью точечной или скобочной записи. Обозначение в скобках удобно, когда имя свойства объекта, которым манипулируют, имеет форму выражения (например,
Array['prototype']['join'].apply()). - При обращении к свойствам объекта используется цепочка поиска, которая сначала просматривает объект, на который ссылается свойство. Если свойство отсутствует, оно ищется в свойстве
prototypeфункций конструктора. Если его там нет, поскольку в прототипе содержится значение объекта, а значение создается из конструктораObject(), это свойствоObject.prototypeсвойствеprototypeконструкторовObject()(Object.prototype). Если свойство там не найдено, то свойство определяется какundefined. - Цепочка поиска
prototype— это то, как наследование (прототипное наследование) было разработано для реализации в JavaScript. - Из-за цепочки поиска свойств объекта (известной как наследование прототипа) все объекты наследуются от
Object()просто потому, что свойствоprototypeсамо по себе является объектомObject(). - Функции JavaScript являются гражданами первого класса: функции — это объекты со свойствами и значениями.
- Ключевое слово
this, когда оно используется внутри функции, является общим способом ссылки на объект, содержащий функцию. - Значение
thisопределяется во время выполнения на основе контекста, в котором вызывается функция. - Используемое в глобальной области видимости, ключевое слово this относится к глобальному объекту.
- JavaScript использует функции как способ создания уникальной области видимости.
- JavaScript обеспечивает глобальную область действия, и именно в этой области существует весь код JavaScript.
- Функции (в частности, инкапсулированные функции) создают цепочку областей действия для разрешения поиска переменных.
- Цепочка контекста устанавливается в зависимости от способа написания кода, а не от контекста, в котором вызывается функция. Это позволяет функции иметь доступ к области, в которой она была изначально написана, даже если функция вызывается из другого контекста. Этот результат известен как закрытие.
- Выражения функций и переменные, объявленные внутри функции без использования
varстановятся глобальными свойствами. Однако операторы функции внутри области действия функции остаются определенными в той области, в которой они написаны. - Функции и переменные, объявленные (без
var) в глобальной области видимости, становятся свойствами глобального объекта. - Функции и переменные, объявленные (с помощью
var) в глобальной области видимости, становятся глобальными переменными.
Вывод
Спасибо за чтение!