Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание
- Название:JavaScript. Подробное руководство, 6-е издание
- Автор:
- Жанр:
- Издательство:Символ-Плюс
- Год:2012
- Город:СПб
- ISBN:978-5-93286-215-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.
JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
Jack: 11, Queen: 12, King: 13, Ace: 14});
// Определение текстового представления карты
Card.prototype.toString = function() {
return this. rank.toString() + " " + this.suit.toString();
};
// Сравнивает значения двух карт в соответствии с правилами игры в покер
Card.prototype.compareTo = function(that){
if (this.rank < that.rank) return -1;
if (this.rank > that.rank) return 1;
return 0;
};
// Функция упорядочения карт в соответствии с правилами игры в покер
Card.orderByRank = function(a,b) { return a.compareTo(b); };
// Функция упорядочения карт в соответствии с правилами игры в бридж
Card.orderBySuit = function(a,b) {
if (a.suit < b.suit) return -1;
if (a.suit > b.suit) return 1;
if (a.rank < b.rank) return -1;
if (a.rank > b.rank) return 1;
return 0;
}:
// Определение класса представления стандартной колоды карт
function Deck() {
var cards = this.cards = []; // Колода - просто массив карт
Card.Suit.foreach(function(s) { // Инициализировать массив
Card.Rank.foreach(function(r) {
cards.push(new Card(s,r));
})
});
}
// Метод перемешивания: тасует колоду карт и возвращает ее
Deck.prototype.shuffle = function() {
// Для каждого элемента массива: поменять местами
// со случайно выбранным элементом ниже
var deck = this.cards, len = deck.length;
for(var і = len-1; і > 0; і--) {
var r = Math.floor(Math.random()*(i+1)), temp; // Случайное число
temp = deck[i], deck[i] = deck[r], deck[r] = temp; // Поменять
}
return this;
}
// Метод раздачи: возвращает массив карт
Deck.prototype.deal = function(n) {
if (this.cards.length < n) throw "Карт для выдачи не хватает";
return this.cards.splice(this.cards.length-n, n);
// Создает новую колоду карт, тасует ее и раздает как в игре в бридж
var deck = (new Deck()).shuffle();
var hand = deck.deal(13).sort(Card.orderBySuit);
9.6.3. Стандартные методы преобразований
В разделах 3.8.3 и 6.10 описываются важные методы, используемые для преобразования типа объектов, часть из которых автоматически вызывается интерпретатором JavaScript по мере необходимости. Вам не обязательно определять эти методы в каждом своем классе, но они играют важную роль, и если вы отказываетесь от их реализации в своих классах, это должен быть осознанный выбор, а не простая оплошность.
Первым и наиболее важным является метод toString() . Назначение этого метода в том, чтобы возвращать строковое представление объекта. Интерпретатор JavaScript автоматически вызывает этот метод, когда объект используется там, где ожидается строка - в качестве имени свойства, например, или с оператором + , выполняющим конкатенацию строк. Если отказаться от реализации этого метода, ваш класс унаследует от Object.prototype реализацию по умолчанию и будет преобразовываться в довольно бесполезную строку «[object Object]». Метод toString() может возвращать более удобочитаемую строку, подходящую для отображения на экране перед конечным пользователем вашего приложения. Однако даже если в этом нет необходимости, часто бывает полезно определить свой метод toString(), чтобы упростить отладку. Классы Range и Complex , представленные в примерах 9.2 и 9.3, имеют собственные реализации метода toString(), как и типы-перечисления, реализация которых приводится в примере 9.7. Ниже мы определим метод, toString() для класса Set из примера 9.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 в массив значений.
Интервал:
Закладка: