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

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

Шрифт:

6.10. Методы класса Object

Как описывалось выше, все объекты в языке JavaScript (за исключением тех, что явно созданы без прототипа) наследуют свойства от Object.prototype. Эти наследуемые свойства являются первичными методами и представляют особый интерес для программистов на JavaScript, потому что доступны повсеместно. Мы уже познакомились с методами

hasOwnProperty
,
propertylsEnumerable
и
isPrototy-peOf
. (И мы уже охватили достаточно много статических функций, определяемых конструктором
Object
, таких как
Object.create
и
Object.getPrototypeOf
.) В этом разделе описывается несколько универсальных методов объектов, которые определены в
Object.prototype
и предназначены для переопределения в других, более специализированных классах.

6.10.1. Метод toString

Метод toString не требует аргументов; он возвращает строку, каким-либо образом представляющую значение объекта, для которого он вызывается. Интерпретатор JavaScript вызывает этот метод объекта во всех тех случаях, когда ему требуется преобразовать объект в строку. Например, это происходит, когда используется оператор

+
для конкатенации строки с объектом, или при передаче объекта методу, требующему строку.

Метод

toString
по умолчанию не очень информативен (однако его удобно использовать для определения класса объекта, как было показано в разделе 6.8.2). Например, следующий фрагмент просто записывает в переменную s строку "[object Object]":

var s = { x:1, у:1 }.toString;

Этот метод по умолчанию не отображает особенно полезной информации, поэтому многие классы определяют собственные версии метода

toString.
Например, когда массив преобразуется в строку, мы получаем список элементов массива, каждый из которых преобразуется в строку, а когда в строку преобразуется функция, мы получаем исходный программный код этой функции. Эти специализированные версии метода
toString
описываются в справочном руководстве. Смотрите, например, описание методов
Array.toString, Date.toString
и
Function.toString
.

В разделе 9.6.3 описывается, как можно переопределить метод

toString
для своих собственных классов.

6.10.2. Метод toLocaleString

В дополнение к методу

toString
все объекты имеют метод
toLocaleString.
Назначение последнего состоит в получении локализованного строкового представления объекта. По умолчанию метод
toLocaleString
, определяемый классом
Object
, никакой локализации не выполняет; он просто вызывает метод
toString
и возвращает полученное от него значение. Классы
Date
и
Number
определяют собственные версии метода
toLocaleString
, возвращающие строковые представления чисел и дат в соответствии с региональными настройками. Класс
Array
определяет версию метода
toLocaleString
, действующую подобно методу
toString
за исключением того, что он форматирует элементы массива вызовом их метода
toLocaleString
, а не
toString
.

6.10.3. Метод toJSON

В действительности

Object.prototype
не определяет метод
toJSON
, но метод
JS0N.stringify
(раздел 6.9) пытается отыскать и использовать метод
toJSON
любого объекта, который требуется сериализовать. Если объект обладает этим методом, он вызывается и сериализации подвергается возвращаемое значение, а не исходный объект. Примером может служить метод
Date.toJSON
.

6.10.4. Метод valueOf

Метод

valueOf
во многом похож на метод
toString,
но вызывается, когда интерпретатору JavaScript требуется преобразовать объект в значение какого-либо простого типа, отличного от строки, - обычно в число. Интерпретатор JavaScript вызывает этот метод автоматически, если объект используется в контексте значения простого типа. Метод
valueOf
по умолчанию не выполняет ничего, что представляло бы интерес, но некоторые встроенные классы объектов переопределяют метод
valueOf
(например,
Date.valueOf
). В разделе 9.6.3 описывается, как можно переопределить метод
valueOf
в собственных типах объектов.

7

Массивы

Массив - это упорядоченная коллекция значений. Значения в массиве называются элементами, и каждый элемент характеризуется числовой позицией в массиве, которая называется индексом. Массивы в языке JavaScript являются нети-пизированными: элементы массива могут иметь любой тип, причем разные элементы одного и того же массива могут иметь разные типы. Элементы массива могут даже быть объектами или другими массивами, что позволяет создавать сложные структуры данных, такие как массивы объектов и массивы массивов. Отсчет индексов массивов в языке JavaScript начинается с нуля и для них используются 32-битные целые числа: первый элемент массива имеет индекс 0, а наибольший возможный индекс имеет значение 4294967294 (232– 2), т.е. максимально возможный размер массива составляет 4294967295 элементов. Массивы в JavaScript являются динамическими: они могут увеличиваться и уменьшаться в размерах по мере необходимости; нет необходимости объявлять фиксированные размеры массивов при их создании или повторно распределять память при изменении их размеров. Массивы в JavaScript могут быть разреженными: не требуется, чтобы массив содержал элементы с непрерывной последовательностью индексов - в массивах могут отсутствовать элементы с некоторыми индексами. Все массивы в JavaScript имеют свойство

length
. Для неразреженных массивов это свойство определяет количество элементов в массиве. Для разреженных массивов значение
length
больше числа всех элементов в массиве.

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

Массивы наследуют свои свойства от прототипа

Array.prototype
, который определяет богатый набор методов манипулирования массивами, о которых рассказывается в разделах 7.8 и 7.9. Большинство из этих методов являются универсальными, т. е. они могут применяться не только к истинным массивам, но и к любым объектам, «похожим на массивы». Объекты, похожие на массивы, будут рассматриваться в разделе 7.11. В ECMAScript 5 строки ведут себя как массивы символов, и мы обсудим такое их поведение в разделе 7.12.

  • Читать дальше
  • 1
  • ...
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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