JavaScript. Подробное руководство, 6-е издание, стр. 125
<b> return defineSubclass(this, constructor, methods, statics);</b><b>};</b>Пример 9.12 демонстрирует, как определить подкласс «вручную», без использования функции def ineSubclass(). В этом примере определяется подкласс SingletonSet класса Set. Класс SingletonSet представляет специализированное множество, доступное только для чтения и состоящее из единственного постоянно элемента.
Пример 9.12. SingletonSet: простой подкласс множеств
<b>// Функция-конструктор</b><b>function SingletonSet(member) {</b><b> this.member = member; // Сохранить единственный элемент множества</b><b>}</b><b>// Создает объект-прототип, наследующий объект-прототип класса Set.</b><b>SingletonSet.prototype = inherit(Set.prototype);</b><b>// Далее добавляются свойства в прототип.</b><b>// Эти свойства переопределяют одноименные свойства объекта</b><b>Set.prototype. extend(SingletonSet.prototype, {</b><b> // Установить свойство constructor</b><b> constructor: SingletonSet,</b><b> // Данное множество доступно только для чтения: методы add() и remove()</b><b> // возбуждают исключение</b><b> add: function() { throw "множество доступно только для чтения"; },</b><b> remove: function() { throw "множество доступно только для чтения"; },</b><b> // Экземпляры SingletonSet всегда имеют размер, равный 1</b><b> size: function() { return 1; },</b><b> // Достаточно вызвать функцию один раз и передать ей единственный элемент,</b><b> foreach: function(f, context) { f.call(context, this.member); },</b><b> // Метод contains() стал проще: такая реализация пригодна только</b><b> // для множества с единственным элементом</b><b> contains: function(x) { return х === this.member; }</b><b>});</b>Класс
<b>SingletonSet</b><b>Set</b><b>toString(), toArray() и equals().</b><b>equals()</b><b>Set</b><b>Set</b><b>size()</b><b>foreach(),</b><b>Set,</b><b>size()</b><b>contains().</b><b>SingletonSet</b><b>Set</b><b>equals()</b><b>SingletonSet </b><b>equals():</b><b>SingletonSet.prototype.equals = function(that) {</b><b> return that instanceof Set && that.size()==1 && that.contains(this.member);</b><b>};</b>Обратите внимание, что класс
<b>SingletonSet</b><b>Set</b><b>Set</b><b>Set.prototype</b><b>Set</b><b>SingletonSet</b><b>SingletonSet </b>9.7.2. Вызов конструктора и методов базового класса
Класс
<b>SingletonSet</b>Пример 9.13 демонстрирует применение этого приема. Он определяет подкласс
<b>NonNullSet</b><b>Set</b><b>null</b><b>undefined</b><b>NonNullSet</b><b>add()</b><b>null</b><b>undefined</b><b>add()</b><b>NonNullSet()</b>