Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание

Тут можно читать онлайн Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание - бесплатно ознакомительный отрывок. Жанр: comp-db, издательство Символ-Плюс, год 2012. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    JavaScript. Подробное руководство, 6-е издание
  • Автор:
  • Жанр:
  • Издательство:
    Символ-Плюс
  • Год:
    2012
  • Город:
    СПб
  • ISBN:
    978-5-93286-215-5
  • Рейтинг:
    2.5/5. Голосов: 21
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Дэвид Флэнаган - JavaScript. Подробное руководство, 6-е издание краткое содержание

JavaScript. Подробное руководство, 6-е издание - описание и краткое содержание, автор Дэвид Флэнаган, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
C момента выхода первого издания в 1996 году книга "JavaScript: Подробное руководство" превратилась в библию программистов на JavaScript. За эти годы было издано более 500000 экземпляров, и веб-разработчики по-прежнему с восторгом отзываются о ней.
Эта книга - одновременно и руководство программиста, и полноценный справочник по базовому языку JavaScript и клиентским прикладным интерфейсам, предоставляемым веб-броузерами.

JavaScript. Подробное руководство, 6-е издание - читать онлайн бесплатно ознакомительный отрывок

JavaScript. Подробное руководство, 6-е издание - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Дэвид Флэнаган
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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;

}

// To же самое можно реализовать в виде метода конструктора суперкласса

Function.prototype.extend = function(constructor, methods, statics) {

return defineSubclass(this, constructor, methods, statics);

};

Пример 9.12 демонстрирует, как определить подкласс «вручную», без использования функции def ineSubclass(). В этом примере определяется подкласс SingletonSet класса Set. Класс SingletonSet представляет специализированное множество, доступное только для чтения и состоящее из единственного постоянно элемента.

Пример 9.12. SingletonSet: простой подкласс множеств

// Функция-конструктор

function SingletonSet(member) {

this.member = member; // Сохранить единственный элемент множества

}

// Создает объект-прототип, наследующий объект-прототип класса Set.

SingletonSet.prototype = inherit(Set.prototype);

// Далее добавляются свойства в прототип.

// Эти свойства переопределяют одноименные свойства объекта

Set.prototype. extend(SingletonSet.prototype, {

// Установить свойство constructor

constructor: SingletonSet,

// Данное множество доступно только для чтения: методы add() и remove()

// возбуждают исключение

add: function() { throw "множество доступно только для чтения"; },

remove: function() { throw "множество доступно только для чтения"; },

// Экземпляры SingletonSet всегда имеют размер, равный 1

size: function() { return 1; },

// Достаточно вызвать функцию один раз и передать ей единственный элемент,

foreach: function(f, context) { f.call(context, this.member); },

// Метод contains() стал проще: такая реализация пригодна только

// для множества с единственным элементом

contains: function(x) { return х === this.member; }

});

Класс SingletonSet имеет очень простую реализацию, состоящую из пяти простых методов. Этот класс не только реализует пять основных методов класса Set , но и наследует от своего суперкласса такие методы, как toString(), toArray() и equals(). Возможность наследования методов является одной из основных причин определения подклассов. Метод equals() класса Set (определен в разделе 9.6.4), например, может сравнивать любые экземпляры класса Set , имеющие методы size() и foreach(), с любыми экземплярами класса Set, имеющими методы size() и contains(). Поскольку класс SingletonSet является подклассом класса Set , он автоматически наследует его метод equals() и не обязан иметь собственную реализацию этого метода. Безусловно, учитывая чрезвычайно упрощенную структуру множества, содержащего единственный элемент, можно было бы реализовать для класса SingletonSet более эффективную версию метода equals():

SingletonSet.prototype.equals = function(that) {

return that instanceof Set && that.size()==1 && that.contains(this.member);

};

Обратите внимание, что класс SingletonSet не просто заимствует список методов из класса Set : он динамически наследует методы класса Set . Если в Set.prototype добавить новый метод, он тут же станет доступен всем экземплярам классов Set и SingletonSet (в предположении, что класс SingletonSet не определяет собственный метод с таким же именем).

9.7.2. Вызов конструктора и методов базового класса

Класс SingletonSet из предыдущего раздела определяет совершенно новый тип множеств и полностью переопределяет основные методы, наследуемые от суперкласса. Однако часто при определении подкласса необходимо лишь расширить или немного изменить поведение методов суперкласса, а не заменить их полностью. В этом случае конструктор и методы подкласса могут вызывать конструктор и методы базового класса.

Пример 9.13 демонстрирует применение этого приема. Он определяет подкласс NonNullSet класса Set : тип множеств, которые не могут содержать элементы со значениями null и undefined . Чтобы исключить возможность включения в множество таких элементов, класс NonNullSet должен выполнить в методе add() проверку значений добавляемых элементов на равенство значениям null и undefined . Но при этом не требуется включать в класс полную реализацию метода add() - можно просто вызвать версию метода из суперкласса. Обратите также внимание, что конструктор NonNullSet() тоже не реализует все необходимые операции: он просто передает свои аргументы конструктору суперкласса (вызывая его как функцию, а не как конструктор), чтобы конструктор суперкласса мог инициализировать вновь созданный объект.

Пример 9.13. Вызов из подкласса конструктора и метода базового суперкласса

/*

* NonNullSet - подкласс класса Set, который не может содержать элементы

* со значениями null и undefined.

*/

function NonNullSet() {

// Простое обращение к суперклассу.

// Вызвать конструктор суперкласса как обычную функцию для инициализации

// объекта, который был создан вызовом этого конструктора.

Set.apply(this, arguments);

}

// Сделать класс NonNullSet подклассом класса Set:

NonNullSet.prototype = inherit(Set.prototype);

NonNullSet.prototype.constructor = NonNullSet;

// Чтобы исключить возможность добавления значений null и undefined,

// достаточно переопределить метод add()

NonNullSet.prototype.add = function() {

// Проверить наличие аргументов со значениями null и undefined

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Дэвид Флэнаган читать все книги автора по порядку

Дэвид Флэнаган - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге JavaScript. Подробное руководство, 6-е издание, автор: Дэвид Флэнаган. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x