• Атрибут writable определяет доступность значения свойства для записи.
• Атрибут enumerable определяет доступность имени свойства для перечисления в цикле for/in.
• Атрибут configurable определяет возможность настройки, т.е. удаления свойства и изменения его атрибутов.
До появления стандарта ECMAScript 5 все свойства в объектах, создаваемые программой, доступны для записи, перечисления и настройки. В ECMAScript 5 предусматривается возможность настройки атрибутов ваших свойств. Как это делается, описывается в разделе 6.7.
В дополнение к свойствам каждый объект имеет три атрибута объекта:
• Атрибут prototype содержит ссылку на другой объект, от которого наследуются свойства.
• Атрибут class содержит строку с именем класса объекта и определяет тип объекта.
• Флаг extensible (в ECMAScript 5) указывает на возможность добавления новых свойств в объект.
Поближе с прототипами и механизмом наследования свойств мы познакомимся в разделах 6.1.3и6.2.2,а более детальное обсуждение всех трех атрибутов объектов вы найдете в разделе 6.8.
Наконец, ниже приводится описание некоторых терминов, которые помогут нам различать три обширные категории объектов в языке JavaScript и два типа свойств:
• Объект базового языка - это объект или класс объектов, определяемый спецификацией ECMAScript. Массивы, функции, даты и регулярные выражения (например) являются объектами базового языка.
• Объект среды выполнения - это объект, определяемый средой выполнения (такой как веб-броузер), куда встроен интерпретатор JavaScript. Объекты HTMLElement, представляющие структуру веб-страницы в клиентском JavaScript, являются объектами среды выполнения. Объекты среды выполнения могут также быть объектами базового языка, например, когда среда выполнения определяет методы, которые являются обычными объектами Function базового языка JavaScript.
• Пользовательский объект - любой объект, созданный в результате выполнения программного кода 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 - зарезервированное слово,
// поэтому в кавычках