Подробно о объектах JavaScript

В JavaScript балом правят объекты. Если вы поняли объекты, вы поняли JavaScript.

В JavaScript почти всё объекты:

  • Логические значения могут быть объектами (если определены при помощи ключевого слова new)
  • Числа могут быть объектами (если определены при помощи ключевого слова new)
  • Строки могут быть объектами (если определены при помощи ключевого слова new)
  • Даты (Date) всегда объекты
  • Математические константы и функции (Math) всегда объекты
  • Регулярные выражения всегда объекты
  • Массивы всегда объекты
  • Функции всегда объекты
  • Объекты всегда объекты

Все значения в JavaScript, за исключением примитивов, являются объектами.

Примитивы в JavaScript

Примитивные значения это значения, у которых нет свойств и методов.

Примитивный тип это тип данных, у которых примитивное значение.

JavaScript определяет 5 примитивных типов данных:

  • string
  • number
  • boolean
  • null
  • undefined

Примитивные значения неизменяемы (они жестко заданы и не могут быть изменены).

Если x = 3.14, вы можете изменить значение x. Но вы не можете изменить значение 3.14.

Значение Тип Комментарий
"Привет" string "Привет" всегда "Привет"
3.14 number 3.14 всегда 3.14
true boolean true всегда true
false boolean false всегда false
null null (object) null всегда null
undefined undefined undefined всегда undefined

Объекты это переменные

Переменные JavaScript могут содержать одиночные значения:


var person = "Иван Петров"; 

Объекты – тоже переменные. Но объекты могут содержать множество значений.

Значения в объектах записываются в виде пар имя:значение (имя и значение разделяются двоеточием).


var person = {firstName:"Иван", lastName:"Петров", age:50, eyeColor:"карие"}; 

Объект в JavaScript это набор именованных значений.

Свойства объекта

Именованные значения объектов в JavaScript называются свойствами.

Свойство Значение
firstName Иван
lastName Петров
age 50
eyeColor карие

Объекты, записанные в виде пар имя-значение, аналогичны:

  • ассоциативным массивам в PHP
  • словарям в Python
  • хэш-таблицам в C
  • хэш-картам в Java
  • хэшам в Ruby и Perl

Методы объекта

Методы это действия, которые можно выполнить с объектами.

Свойствами объектов могут быть как примитивные значения, так и другие объекты и функции.

Метод объекта это свойство, которое содержит определение функции.

Свойство Значение
firstName Иван
lastName Петров
age 50
eyeColor карие
fullName function() { return this.firstName + " " + this.lastName; }

Объекты JavaScript это контейнеры для именованных значений, которые называются свойства и методы.

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

В JavaScript вы можете определять и создавать свои собственные объекты.

Существует несколько способов создания объектов:

  • Определение и создание объекта при помощи объектного литерала.
  • Определение и создание объекта при помощи ключевого слова new.
  • Определение конструктора объекта и создание переменных с типом этого конструктора.

В ECMAScript 5 объекты также можно создавать при помощи функции Object.create().

Использование объектных литералов

Это самый простой способ создания объектов JavaScript.

Используя объектные литералы, вы одновременно определяете и создаете объект.

Объектный литерал — это список из пар имя:значение (вроде age:50), помещенных в фигурные скобки { }.

В следующем примере создается новый объект JavaScript с четырьмя свойствами:


var person = {firstName:"Иван", lastName:"Петров", age:50, eyeColor:"карие"}; 

Пробелы и переносы строки не имеют значения. Определение объекта может занимать несколько строк:


var person = {
    firstName:"Иван",
    lastName:"Петров",
    age:50,
    eyeColor:"карие"
}; 

Использование ключевого слова new

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


 var person = new Object();
 person.firstName = "Иван";
 person.lastName = "Петров";
 person.age = 50;
 person.eyeColor = "карие";

Внимание! Код в двух предыдущих примерах делает одно и то же. Поэтому нет необходимости использовать выражение new Object(). Для простоты, лучшей читаемости и большей скорости выполнения используйте первый вариант создания объектов (при помощи объектных литералов).

Работа по ссылке

Объекты JavaScript адресуются только по ссылке, а не по значению.

Так, если переменная person является объектом, то следующее выражение не создаст ее копию:


var x = person;  // Это не создаст копию переменной person. 

Объект x это не копия объекта person. Это и есть объект person. И x, и person – один и тот же объект.

Любые изменения объекта x также приведут к аналогичным изменениям объекта person, потому что x и person это один и тот же объект.


 var person = {firstName:"Иван", lastName:"Петров", age:50, eyeColor:"карие"}

 var x = person;
 x.age = 10;           // Это изменит как x.age, так и person.age