Чтение онлайн

ЖАНРЫ

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Пользовательский объект– любой объект, созданный в результате выполнения программного кода JavaScript.

Собственное свойство– это свойство, определяемое непосредственно в данном объекте.

Унаследованное свойство– это свойство, определяемое прототипом объекта."

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

Объекты можно создавать с помощью литералов объектов, ключевого слова new и (в ECMAScript 5) функции Object.create. Все эти приемы описываются в следующих разделах.

6.1.1. Литералы объектов

Самый простой

способ создать объект заключается во включении в программу литерала объекта. Литерал объекта - это заключенный в фигурные скобки список свойств (пар имя/значение), разделенных запятыми. Именем свойства может быть идентификатор или строковый литерал (допускается использовать пустую строку). Значением свойства может быть любое выражение, допустимое в JavaScript, - значение выражения (это может быть простое значение или объект) станет значением свойства. Ниже приводится несколько примеров создания объектов:

var empty = {};
// Объект без свойств

var point = { x:0, y:0 }; // Два свойства

var point2 = { x:point.x, y:point.y+1 };// Более сложные значения

var book = {

"main title": "JavaScript", // Имена свойств с пробелами

'sub-title': "The Definitive Guide", // и дефисами, поэтому используются

// строковые литералы

"for": "all audiences", // for - зарезервированное слово,

// поэтому в кавычках

author: { // Значением этого свойства является

firstname: "David”, // объект. Обратите внимание, что

surname: "Flanagan" // имена этих свойств без кавычек.

}

}

В ECMAScript 5 (и в некоторых реализациях ECMAScript 3) допускается использовать зарезервированные слова в качестве имен свойств без кавычек. Однако в целом имена свойств, совпадающие с зарезервированными словами, в ECMAScript 3 должны заключаться в кавычки. В ECMAScript 5 последняя запятая, следующая за последним свойством в литерале объекта, игнорируется. В большинстве реализаций ECMAScript 3 завершающие запятые также игнорируются, но IE интерпретирует их наличие как ошибку.

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

6.1.2. Создание объектов с помощью оператора new

Оператор new создает и инициализирует новый объект. За этим оператором должно следовать имя функции. Функция, используемая таким способом, называется конструктором и служит для инициализации вновь созданного объекта. Базовый JavaScript включает множество встроенных конструкторов для создания объектов базового языка. Например:

var
о = new Object; // Создать новый пустой объект: то же, что и {}.

var а = new Аггау; // Создать пустой массив: то же, что и [].

var d = new Date; // Создать объект Date, представляющий текущее время

var г = new RegExp("js"); // Создать объект RegExp для операций

// сопоставления с шаблоном.

Помимо этих встроенных конструкторов имеется возможность определять свои собственные функции-конструкторы для инициализации вновь создаваемых объектов. О том, как это делается, рассказывается в главе 9.

6.1.3. Прототипы

Прежде чем перейти к третьему способу создания объектов, необходимо сделать паузу, чтобы познакомиться с прототипами. Каждый объект в языке JavaScript имеет второй объект (или

null
, но значительно реже), ассоциированный с ним. Этот второй объект называется прототипом, и первый объект наследует от прототипа его свойства.

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

Object.prototype
. Объекты, созданные с помощью ключевого слова
new
и вызова конструктора, в качестве прототипа получают значение свойства
prototype
функции-конструктора. Поэтому объект, созданный выражением
new Object
, наследует свойства объекта
Object.prototype
, как если бы он был создан с помощью литерала в фигурных скобках
{}
. Аналогично прототипом объекта, созданного выражением
new Array,
является
Array.prototype
, а прототипом объекта, созданного выражением
new Date,
является
Date.prototype
.

Object.prototype
– один из немногих объектов, которые не имеют прототипа: у него нет унаследованных свойств. Другие объекты-прототипы являются самыми обычными объектами, имеющими собственные прототипы. Все встроенные конструкторы (и большинство пользовательских конструкторов) наследуют прототип
Object.prototype
. Например,
Date. prototype
наследует свойства от
Object.prototype
, поэтому объект
Date
, созданный выражением
new Date,
наследует свойства от обоих прототипов,
Date.prototype
и
Object.prototype
. Такая связанная последовательность объектов-прототипов называется цепочкой прототипов.

Описание механизма наследования свойств приводится в разделе 6.2.2. Как получить ссылку на прототип объекта, рассказывается в разделе 6.8.1. А в главе 9 более детально будет обсуждаться связь между прототипами и конструкторами: там будет показано, как определять новые «классы» объектов посредством объявления функций-конструкторов и как записывать ссылку на объект-прототип в их свойство prototype для последующего использования «экземплярами», созданными с помощью этого конструктора.

Поделиться с друзьями: