Дэвид Флэнаган - 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-е издание - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Дэвид Флэнаган
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

В примере 9.5 определяется функция quacks() (более подходящим было бы имя «implements» (реализует), но implements является зарезервированным словом), которая может пригодиться для грубого определения типа. Функция quacks() проверяет наличие в объекте (первый аргумент функции) методов, указанных в остальных аргументах. Для каждого последующего аргумента, если аргумент является строкой, проверяется наличие метода с этим именем. Если аргумент является объектом, проверяется наличие в первом объекте методов с теми же именами, что и во втором объекте. Если аргумент является функцией, предполагается, что она является конструктором, и в этом случае проверяется наличие в первом объекте методов с теми же именами, что и в объекте-прототипе.

Пример 9.5. Функция грубой проверки типа

// Возвращает true, если о реализует методы, определяемые последующими аргументами.

function quacks(o /*, ... */) {

for(var i=1; i

var arg = arguments[i];

switch(typeof arg) { // Если arg - это:

case ’string': // строка: проверить наличие метода с этим именем

if (typeof o[arg] !== "function") return false;

continue;

case ’function’: //функция: использовать объект-прототип

// Если аргумент является функцией, использовать ее прототип

arg = arg.prototype;

// переход к следующему случаю case

case object': // объект: проверить наличие соотв. методов

for(var m in arg) { // Для каждого свойства объекта

if (typeof arg[m]!=="function") continue; // Пропустить свойства,

// не являющиеся методами

if (typeof o[m] !== "function") return false;

}

}

}

// Если мы попали сюда, значит, объект о реализует все, что требуется

return true;

}

Есть два важных момента, касающиеся функции quacks(), которые нужно иметь в виду. Во-первых, она просто проверяет наличие в объекте одного или более методов с заданными именами. Присутствие этих свойств ничего не говорит ни о том, что делают эти функции, ни о том, сколько и какого типа аргументы они принимают. Однако это и есть сущность грубого определения типа. Определяя интерфейс, в котором вместо строгой проверки используется прием грубого определения типа, вы получаете более гибкий прикладной интерфейс, но при этом перекладываете на пользователя всю ответственность за правильное его использование. Второй важный момент, касающийся функции quacks(), заключается в том, что она не может работать со встроенными классами. Например, нельзя выполнить проверку quacks(o, Array), чтобы убедиться, что объект о обладает всеми методами класса Array . Это обусловлено тем, что методы встроенных классов недоступны для перечисления и цикл for/in в quacks() просто не заметит их. (Следует отметить, что это ограничение можно преодолеть в ECMAScript 5 с помощью функции Object.getOwnProperty Names() .)

9.6. Приемы объектно-ориентированного программирования в JavaScript

До сих пор в этой главе мы рассматривали архитектурные основы классов в языке JavaScript: важную роль объектов-прототипов, связь классов с функциями-конструкторами, как действует оператор instanceof и т. д. В этом разделе мы продемонстрируем несколько практических (пусть и не фундаментальных) приемов программирования на языке JavaScript с применением классов. Начнем с двух нетривиальных примеров классов, которые не только интересны сами по себе, но также послужат отправной точкой для дальнейшего обсуждения.

9.6.1. Пример: класс множества

Множество - это структура данных, представляющая неупорядоченную коллекцию неповторяющихся значений. К фундаментальным операциям над множествами относятся сложение множеств и проверка вхождения значения в множество, и обычно множества реализуются так, чтобы эти операции имели максимальную скорость выполнения. Объекты в языке JavaScript по сути являются множествами имен свойств, где с каждым именем связано некоторое значение. Таким образом, объекты легко можно использовать как множества строк. В примере 9.6 реализован более универсальный класс Set . Он отображает любые значения, допустимые в языке JavaScript, в уникальные строки и использует их в качестве имен свойств. Объекты и функции не имеют достаточно краткого строкового представления, гарантирующего уникальность, поэтому класс Set должен определить идентификационное свойство в любом объекте или функции, сохраняемых в множестве.

Пример 9.6. Set.js: произвольное множество значений

function Set() { // Это конструктор

this.values = {}; // Свойства этого объекта составляют множество

this.n =0; // Количество значений в множестве

this.add.apply(this. arguments); // Все аргументы являются значениями,

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

// Добавляет все аргументы в множество.

Set.prototype.add = function() {

for(var і = 0; і < arguments.length; i++) { // Для каждого аргумента

var val = arguments[i]; // Добавляемое значение

var stг = Set._v2s(val); // Преобразовать в строку

if (!this.values.hasOwnProperty(stг)) { // Если отсутствует в множ,

this.values[str] = val; // Отобразить строку в знач.

this.n++; // Увеличить размер множества

}

}

return this; // Для поддержки цепочек вызовов методов

};

// Удаляет все аргументы из множества.

Set.prototype.remove = function() {

for(var і = 0; і < arguments.length; i++) { // Для каждого аргумента

var str = Set._v2s(arguments[i]); // Отобразить в строку

if (this.values.hasOwnProperty(stг)) { // Если присутствует в множ,

delete this.values[str]; // Удалить

this.n--; // Уменьшить размер множества

}

}

return this; // Для поддержки цепочек вызовов методов

}

// Возвращает true, если множество содержит value; иначе возвращает false.

Set.prototype.contains = function(value) {

return this.values.has0wnProperty(Set._v2s(value));

};

// Возвращает размер множества.

Set.prototype.size = function() { return this.n; };

// Вызывает функцию f в указанном контексте для каждого элемента множества.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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