Важно понимать, что Object.seal()
и Object.freeze()
воздействуют только на объект, который им передается: они не затрагивают прототип этого объекта. Если в программе потребуется полностью зафиксировать объект, вам, вероятно, потребуется зафиксировать также объекты в цепочке прототипов.
Все методы, Object.preventExtensions()
, Object.seal()
и Object.freeze()
, возвращают переданный им объект, а это означает, что их можно использовать во вложенных вызовах:
// Создать нерасширяемый объект с ненастраиваемыми свойствами, с жестко
// зафиксированным прототипом и свойством, недоступным для перечисления
var о = Object.seal(Object.create(Object.freeze({x:1}),
{у: {value: 2, writable: true}})):
6.9. Сериализация объектов
Сериализация объектов - это процесс преобразования объектов в строковую форму представления, которая позднее может использоваться для их восстановления. Для сериализации и восстановления объектов JavaScript стандартом ЕСМА-Script 5 предоставляются встроенные функции JSON.stringify()
и JSON.parse()
. Эти функции используют формат обмена данными JSON. Название JSON происходит от «JavaScript Object Notation» (форма записи объектов JavaScript), а синтаксис этой формы записи напоминает синтаксис литералов объектов и массивов в языке JavaScript:
о = {х:1, у:{z:[false.null,""]}}: // Определить испытательный объект
s = JSON.stringify(o); // s == '{"х":1,"у":{"z":[false,null,'"]}}'
p = JSON.parse(s); // P - глубокая копия объекта о
Базовые реализации этих функций в ECMAScript 5 очень точно повторяют общедоступные реализации в ECMAScript 3, доступные в http://json.org/json2.js. С практической точки зрения это совершенно одинаковые реализации, и эти функции стандарта ECMAScript 5 можно использовать в ECMAScript 3, подключив указанный выше модуль json2.js.
Синтаксис формата JSON является лишь подмножеством синтаксиса языка JavaScript и не может использоваться для представления всех возможных значений, допустимых в JavaScript. Поддерживаются и могут быть сериализованы и восстановлены: объекты, массивы, строки, конечные числовые значения, true
, false
и null
. Значения NaN, Infinity
и -Infinity
сериализуются в значение null
. Объекты Date
сериализуются в строки с датами в формате ISO (смотрите описание функции Date.toJSON()
), но JSON.parse()
оставляет их в строковом представлении и не восстанавливает первоначальные объекты Date
. Объекты Function, RegExp
и Error
и значение undefined
не могут быть сериализованы или восстановлены. Функция JSON.stringify()
сериализует только перечислимые собственные свойства объекта. Если значение свойства не может быть сериализовано, это свойство просто исключается из строкового представления. Обе функции, JSON.stringify()
и JSON.parse()
, принимают необязательный второй аргумент, который можно использовать для настройки процесса сериализации и/или восстановления, например, посредством определения списка свойств, подлежащих сериализации, или функции преобразования значений во время сериализации. В справочном разделе приводится полное описание этих функций.
6.10. Методы класса Object
Как описывалось выше, все объекты в языке JavaScript (за исключением тех, что явно созданы без прототипа) наследуют свойства от Object.prototype. Эти наследуемые свойства являются первичными методами и представляют особый интерес для программистов на JavaScript, потому что доступны повсеместно. Мы уже познакомились с методами hasOwnProperty()
, propertylsEnumerable()
и isPrototy-peOf()
. (И мы уже охватили достаточно много статических функций, определяемых конструктором Object
, таких как Object.create()
и Object.getPrototypeOf()
.) В этом разделе описывается несколько универсальных методов объектов, которые определены в Object.prototype
и предназначены для переопределения в других, более специализированных классах.
Метод toString() не требует аргументов; он возвращает строку, каким-либо образом представляющую значение объекта, для которого он вызывается. Интерпретатор JavaScript вызывает этот метод объекта во всех тех случаях, когда ему требуется преобразовать объект в строку. Например, это происходит, когда используется оператор +
для конкатенации строки с объектом, или при передаче объекта методу, требующему строку.
Читать дальше
Конец ознакомительного отрывка
Купить книгу