Подробно о объектах 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.14number3.14 всегда 3.14
truebooleantrue всегда true
falsebooleanfalse всегда false
nullnull (object)null всегда null
undefinedundefinedundefined всегда undefined

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

СвойствоЗначение
firstNameИван
lastNameПетров
age50
eyeColorкарие
fullNamefunction() { 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