Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
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 (2 32-2), т.е. максимально возможный размер массива составляет 4294967295 элементов. Массивы в JavaScript являются динамическими: они могут увеличиваться и уменьшаться в размерах по мере необходимости; нет необходимости объявлять фиксированные размеры массивов при их создании или повторно распределять память при изменении их размеров. Массивы в JavaScript могут быть разреженными: не требуется, чтобы массив содержал элементы с непрерывной последовательностью индексов - в массивах могут отсутствовать элементы с некоторыми индексами. Все массивы в JavaScript имеют свойство length
. Для неразреженных массивов это свойство определяет количество элементов в массиве. Для разреженных массивов значение length
больше числа всех элементов в массиве.
Массивы в языке JavaScript - это специализированная форма объектов, а индексы массивов означают чуть больше, чем просто имена свойств, которые по совпадению являются целыми числами. Мы еще не раз будем говорить о специфических особенностях массивов повсюду в этой главе. Реализации обычно оптимизируют операции с массивами, благодаря чему доступ к элементам массивов по их числовым индексам выполняется значительно быстрее, чем доступ к обычным свойствам объектов.
Массивы наследуют свои свойства от прототипа Array.prototype
, который определяет богатый набор методов манипулирования массивами, о которых рассказывается в разделах 7.8 и 7.9. Большинство из этих методов являются универсальными, т. е. они могут применяться не только к истинным массивам, но и к любым объектам, «похожим на массивы». Объекты, похожие на массивы, будут рассматриваться в разделе 7.11. В ECMAScript 5 строки ведут себя как массивы символов, и мы обсудим такое их поведение в разделе 7.12.
Интервал:
Закладка: