Следующие пункты суммируют то, что вы должны были выучить, прочитав эту книгу (и исследуя примеры кода). Прочитайте каждое резюме, и если вы не понимаете, что говорится, вернитесь к теме в книге.
- Объект состоит из именованных свойств, которые хранят значения.
- Большинство всего в 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
) в глобальной области видимости, становятся глобальными переменными.
Вывод
Спасибо за чтение!