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

Класс
<b>Card</b><b>compareTo(),</b><b>Range</b><b>Range.prototype.compareTo = function(that) { </b><b> return this.from - that.from;</b><b>};</b>Обратите внимание, что вычитание, выполняемое этим методом, возвращает значение меньше нуля, равное нулю или больше нуля в соответствии с порядком следования двух объектов
<b>Range</b><b>Card.Rank</b><b>valueOf(),</b><b>сотраreTo()</b><b>Card</b>Методы
<b>equals(),</b><b>false</b><b>compareTo()</b><b>compareTo()</b>Примечательно, что метод
<b>compareTo()</b><b>Range</b><b>сотрагеТо()</b><b>equals(),</b><b>equals()</b><b>compareTo()</b><b>compareTo()</b><b>Range</b><b>equals()</b><b>// Порядок следования диапазонов определяется их нижними границами</b><b>// или верхними границами, если нижние границы равны.Возбуждает исключение,</b><b>// если методу передается объект, не являющийся экземпляром класса Range.</b><b>// Возвращает 0, только если this.equals(that) возвращает true.</b><b>Range.prototype.compareTo = function(that) {</b><b> if (!(that instanceof Range))</b><b> throw new Еrror("Нельзя сравнить Range c " + that);</b><b> var diff = this.from - that.from; // Сравнить нижние границы</b><b> if (diff == 0) diff = this.to - that.to; // Если равны, сравнить верхние </b><b> return diff;</b><b>};</b>Одна из причин, по которым может потребоваться сравнивать экземпляры класса, - обеспечить возможность сортировки массива экземпляров этого класса. Метод Array.sort() может принимать в виде необязательного аргумента функцию сравнения, которая должна следовать тем же соглашениям о возвращаемом значении, что и метод
<b>compareTo().</b><b>compareTo(),</b><b>Range</b><b>ranges.sort(function(a,b) { return a.compareTo(b); });</b>Сортировка имеет настолько большое значение, что следует рассмотреть возможность реализации статического метода сравнения в любом классе, где определен метод экземпляров
<b>compareTo().</b><b>Range.byLowerBound = function(a,b) { return a.compareTo(b); };</b>При наличии этого метода сортировка массива может быть реализована еще проще:
<b>ranges.sort(Range.byLowerBound);</b>Некоторые классы могут быть упорядочены более чем одним способом. Например, класс
<b>Card</b>9.6.5. Заимствование методов
В методах JavaScript нет ничего необычного - это обычные функции, присвоенные свойствам объекта и вызываемые «посредством» или «в контексте» объекта.
Одна и та же функция может быть присвоена двум свойствам и играть роль двух методов. Мы использовали эту возможность в нашем классе
<b>Set</b><b>toArray()</b><b>toJSON()</b>Одна и та же функция может даже использоваться как метод сразу нескольких классов. Большинство методов класса
<b>Array</b><b>Array.prototype</b>