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

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

Шрифт:

case null: return 'n'; // отображаются в односимвольные строки.

case true: return 't';

case false: return 'f;

default: switch(typeof val) {

case 'number': return + val; // Числа получают префикс #.

case 'string': return "" + val; // Строки получают префикс ".

default: return '@' + objectId(val); // Объекты и функции - @

}

}

// Для любого объекта возвращается строка. Для разных объектов эта функция

// будет возвращать разные строки, а для одного и того же объекта всегда

// будет возвращать одну и ту же строку. Для этого в объекте о создается свойство.

// В ES5 это свойство можно сделать неперечислимым и доступным только для чтения,

function objectld(o) {

var prop = "I **objectid**|”; // Имя частного идентификац. свойства

if (!о.hasOwnProperty(prop)) // Если объект не имеет этого свойства

о[ргор] = Set._v2s.next++; // Присвоить ему след, доступ, значение

return о[ргор]; // Вернуть идентификатор

}

};

Set._v2s.next = 100; // Начальное значение для идентификаторов объектов.

9.6.2. Пример: типы-перечисления

Перечислениями называются типы, которые могут принимать конечное количество значений, объявляемых (или «перечисляемых») при определении типа.

В языке С и его производных типы-перечисления объявляются с помощью ключевого слова

enum
. В ECMAScript 5
enum
– это зарезервированное (но не используемое) слово, оставленное на тот случай, если когда-нибудь в JavaScript будут реализованы встроенные типы-перечисления. А пока в примере 9.7 демонстрируется, как можно определить собственный тип-перечисление на языке JavaScript. Обратите внимание, что здесь используется функция
inherit
из примера 6.1.

Пример 9.7 содержит единственную функцию

enumeration.
Однако она не является конструктором: она не определяет класс с именем «enumeration». Но она является фабричной функцией: при каждом вызове она создает и возвращает новый класс. Ниже показано, как ее можно использовать:

// Создать новый класс Coin с четырьмя возможными значениями:

// Coin.Penny, Coin.Nickel и т. д.

var Coin = enumeration({Penny: 1, Nickel:5, Dime:10, Quarter:25});

var c = Coin.Dime; // Это экземпляр нового класса

с instanceof Coin // => true: instanceof работает

c.constructor == Coin // => true: свойство constructor работает

Coin.Quarter + 3*Coin.Nickel // => 40: значения преобразуются в числа

Coin.Dime == 10 // => true: еще одно преобразование в число

Coin.Dime > Coin.Nickel // => true: операторы отношения работают

String(Coin.Dime) + ":" + Coin.Dime // => "Dime:10": преобразов, в строку

Цель этого примера состоит в том, чтобы продемонстрировать, что классы в языке JavaScript являются более гибкими и динамичными, чем статические классы в таких языках, как C++ и Java.

  • Читать дальше
  • 1
  • ...
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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