Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

С методом

toString
тесно связан метод
toLocaleString
: он должен преобразовывать объект в строку с учетом региональных настроек. По умолчанию объекты наследуют метод
toLocaleString,
который просто вызывает их метод
toString.
Некоторые встроенные типы имеют более полезные реализации метода
toLocaleString,
которые возвращают строки с учетом региональных настроек. Если в реализации своего метода
toString
вам придется преобразовывать в строки другие объекты, вы также должны определить свой метод
toLocaleString,
выполняющий те же преобразования вызовом метода
toLocaleString
объектов. Ниже мы реализуем этот метод для класса
Set
.

Третьим методом является метод

valueOf.
Его цель - преобразовать объект в простое значение. Метод
valueOf
вызывается автоматически, когда объект используется в числовом контексте, например, с арифметическими операторами (отличными от
+
) и с операторами отношения. Большинство объектов не имеют сколько-нибудь осмысленного простого представления и потому не определяют этот метод. Однако типы-перечисления в примере 9.7 представляют случай, когда метод
valueOf
имеет большое значение.

Четвертый метод -

toJSON
– вызывается автоматически функцией
JSON.stringifу.
Формат JSON предназначен для сериализации структур данных и может использоваться для представления простых значений, массивов и простых объектов. При преобразовании в этот формат не делается никаких предположений о классах, и при сериализации объекта игнорируются его прототип и конструктор. Если вызвать функцию
JSON.stringify
для сериализации объекта
Range
или
Complex
, например, она вернет строку вида
{"from”: 1, ”to":3}
или
{"r":1, "i":-1}.
Если передать такую строку функции
JSON.parse,
она вернет простой объект со свойствами, соответствующими объекту
Range
или
Complex
, но не наследующий методы класса
Range
или
Complex
.

Такой формат сериализации вполне подходит для классов, таких как

Range
и
Complex
, но для более сложных классов может потребоваться написать собственный метод
toJSON,
чтобы определить иной формат сериализации. Если объект имеет метод
toJSON,
функция
JSON.stringify
не будет выполнять сериализацию самого объекта, а вызовет метод
toJSON
и произведет сериализацию значения (простого значения или объекта), которое он вернет. Например, объекты
Date
имеют собственный метод
toJSON,
возвращающий строковое представление даты. Типы-перечисления в примере 9.7 делают то же самое: их метод
toJS0N
возвращает то же значение, что и метод
toString.
Самым близким к представлению множества в формате JSON является массив, поэтому ниже мы определим метод
toJSON,
который будет преобразовывать объект
Set
в массив значений.

Класс

Set
, представленный в примере 9.6, не определяет ни один из этих методов. Множество не может быть представлено простым значением, поэтому нет смысла определять метод
valueOf,
но было бы желательно определить в этом классе методы
toString, toLocaleString
и
toJSON.
Можно это сделать, как показано ниже. Обратите внимание, что для добавления методов в
Set.prototype
используется функция
extend
(пример 6.2):

// Добавить новые методы в объект-прототип класса Set.

extend(Set.prototype, {

// Преобразует множество в строку

toString :
function {

var s = "{", i = 0;

this.foreach(function(v){ s += ((i++ > 0)?", + ":"") +v });

return s + "}";

}

// Действует так же, как toString, но вызывает toLocaleString

// для всех значений

toLocaleString :
function {

var s = "{", і = 0;

this.foreach(function(v){

if (i++ > 0)
s += ", ";

if (v == null) s += v; // null и undefined

else s += v. toLocaleString; // остальные

});

return s +

},

// Преобразует множество в массив значений

  • Читать дальше
  • 1
  • ...
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: