Js пример из книги

224
09 марта 2017, 23:46
// Вспо­мо­га­тель­ная функ­ция, ко­то­рая мо­жет ис­поль­зо­вать­ся для оп­ре­де­ле­ния
// лю­бо­го аб­ст­ракт­но­го ме­то­да
function abstractmethod() { throw new Error("аб­ст­ракт­ный ме­тод"); }
/*
* Класс AbstractSet оп­ре­де­ля­ет един­ст­вен­ный аб­ст­ракт­ный ме­тод, contains().
*/
function AbstractSet() {
­­­­ throw new Error("Нель­зя соз­дать эк­зем­п­ляр аб­ст­ракт­но­го клас­са");
}
AbstractSet.prototype.contains = abstractmethod;
/*
* NotSet - кон­крет­ный под­класс клас­са AbstractSet.
* Эле­мен­та­ми это­го мно­же­ст­ва яв­ля­ют­ся все зна­че­ния, ко­то­рые не яв­ля­ют­ся
* эле­мен­та­ми не­ко­то­ро­го дру­го­го мно­же­ст­ва. По­сколь­ку это мно­же­ст­во
* оп­ре­де­ля­ет­ся в тер­ми­нах дру­го­го мно­же­ст­ва, оно не дос­туп­но для за­пи­си,
* а так как оно име­ет бес­ко­неч­ное чис­ло эле­мен­тов, оно не­дос­туп­но для пе­ре­чис­ле­ния.
* Все, что по­зво­ля­ет этот класс, - это про­ве­рить при­над­леж­ность к мно­же­ст­ву.
* Об­ра­ти­те вни­ма­ние, что для оп­ре­де­ле­ния это­го под­клас­са ис­поль­зу­ет­ся ме­тод
* Function.prototype.extend(), объ­яв­лен­ный вы­ше.
*/
var NotSet = AbstractSet.extend(
­­­­ function NotSet(set) { this.set = set; },
­­­­ {
­­­­­­­­ contains: function(x) { return !this.set.contains(x); },
­­­­­­­­ toString: function(x) { return "~" + this.set.toString(); },
­­­­­­­­ equals: function(that) {
­­­­­­­­­­­­ return that instanceof NotSet && this.set.equals(that.set);
­­­­­­­­ }
­­­­ }
);
// Про­стая функ­ция для соз­да­ния про­стых под­клас­сов
function defineSubclass(superclass, ­­ // Кон­ст­рук­тор су­пер­клас­са
­­­­­­­­­­­­­­­­­­­­­­­­ constructor, // Кон­ст­рук­тор но­во­го под­клас­са
­­­­­­­­­­­­­­­­­­­­­­­­ methods, ­­­­­ // Ме­то­ды эк­земпл.: ко­пи­ру­ют­ся в про­то­тип
­­­­­­­­­­­­­­­­­­­­­­­­ statics) ­­­­­ // Свой­ст­ва клас­са: ко­пи­ру­ют­ся в констр-р
{
­­­­ // Ус­та­но­вить объ­ект-про­то­тип под­клас­са
­­­­ constructor.prototype = inherit(superclass.prototype);
­­­­ constructor.prototype.constructor = constructor;
­­­­ // Ско­пи­ро­вать ме­то­ды methods и statics, как в слу­чае с обыч­ны­ми клас­са­ми
­­­­ if (methods) extend(constructor.prototype, methods);
­­­­ if (statics) extend(constructor, statics);
­­­­ // Вер­нуть класс
­­­­ return constructor;
}
// То же са­мое мож­но реа­ли­зо­вать в ви­де ме­то­да кон­ст­рук­то­ра су­пер­клас­са
Function.prototype.extend = function(constructor, methods, statics) {
­­­­ return defineSubclass(this, constructor, methods, statics);
};

Почему в this.set.equals передается that.set, а не просто that. Ранее свойство set определенно не было. Пример из книги Фленагана 259 с.

READ ALSO
Как сделать спуск страницы с помощью кнопки?

Как сделать спуск страницы с помощью кнопки?

Как сделать чтобы при нажатии на кнопку спускалось вниз там где начинается определенный раздел(название кнопки=название раздела)?

198
Как сделать ограничение на ввод?

Как сделать ограничение на ввод?

Есть скрипт, который ограничивает кол-во вводных символов до 3х и разрешены только цифры

321
Не срабатывает событие on input в IE9

Не срабатывает событие on input в IE9

Есть обработчик событий:

314