Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

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
имеет большое значение.

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

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.62
рейтинг книги
Последний реанорец. Том I и Том II

Хозяин Теней

Петров Максим Николаевич
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Хозяин Теней

На границе империй. Том 10. Часть 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 6

Мастер Трав III

Мордорский Ваня
3. Мастер Трав
Фантастика:
фэнтези
рпг
фантастика: прочее
попаданцы
5.75
рейтинг книги
Мастер Трав III

Лекарь Империи 7

Карелин Сергей Витальевич
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 7

Чехов книга 3

Гоблин (MeXXanik)
3. Адвокат Чехов
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Чехов книга 3

Газлайтер. Том 6

Володин Григорий
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 6

Третий. Том 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 3

Страж Кодекса. Книга VI

Романов Илья Николаевич
6. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Страж Кодекса. Книга VI

Перешагнуть пропасть

Муравьёв Константин Николаевич
1. Перешагнуть пропасть
Фантастика:
боевая фантастика
космическая фантастика
8.38
рейтинг книги
Перешагнуть пропасть

Наномашины, Кошмар Академии! Том 10

Новиков Николай Васильевич
10. Первый среди карапузов
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Наномашины, Кошмар Академии! Том 10

Ким

Киплинг Редьярд Джозеф
Приключения:
исторические приключения
7.62
рейтинг книги
Ким

Его звали Тони. Книга 5

Кронос Александр
5. Щенки косуль
Фантастика:
городское фэнтези
технофэнтези
попаданцы
7.00
рейтинг книги
Его звали Тони. Книга 5

Эпоха Опустошителя. Том V

Павлов Вел
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том V