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

Интервал:

Закладка:

Сделать

}

};

// "Частное" поле класса, используемое методом Complex.parse().

// Символ подчеркивания в его имени указывает, что оно предназначено

// для внутреннего использования и не является частью общедоступного API класса.

Complex._format = /^\{([^,]+),([^}]+)\}$/;

Определение класса Complex, представленное в примере 9.3, позволяет использовать конструктор, поля экземпляра, методы экземпляров, поля класса и методы класса, как показано ниже:

var с = new Complex(2,3); // Создать новый объект с помощью конструктора

var d = new Complex(c.i.c.r); // Использовать свойства экземпляра с

c.add(d).toString(); // => "{5.5}": использовать методы экземпляров

// Более сложное выражение, в котором используются метод и поле класса

Complex.parse(c.toStringO). // Преобразовать с в строку и обратно,

add(c.neg()). // сложить с числом с противоположным знаком,

equals(Complex.ZERO) // и результат всегда будет равен нулю

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

Complex.prototype.toString = function() {

with(this) {

return + r + " + і +

}

};

В языке Java поддерживается возможность объявлять поля со спецификатором final , чтобы показать, что они являются константами, и объявлять поля и методы со спецификатором private , чтобы показать, что они являются частными для реализации класса и недоступны пользователям класса. В языке JavaScript эти ключевые слова отсутствуют, поэтому, чтобы обозначить частные свойства (имена которых начинаются с символа подчеркивания) и свойства, доступные только для чтения (имена которых содержат только заглавные символы), в примере 9.3 используются соглашения по именованию. Мы еще вернемся к этим двум темами ниже в этой главе: частные свойства можно имитировать с помощью локальных переменных в замыканиях (раздел 9.6.6), а возможность определения свойств-констант поддерживается стандартом ECMAScript 5 (раздел 9.8.2).

9.4. Наращивание возможностей классов

Механизм наследования на основе прототипов, используемый в языке JavaScript, имеет динамическую природу: объекты наследуют все свойства своих прототипов, даже если они были добавлены в прототипы уже после создания объектов. Это означает, что в JavaScript имеется возможность наращивать возможности классов простым добавлением новых методов в объекты-прототипы. Ниже приводится фрагмент, который добавляет метод вычисления сопряженного комплексного числа в класс Complex из примера 9.3:

// Возвращает комплексное число, которое является сопряженным

// по отношению к текущему.

Complex.prototype.conj = function() { return new Complex(this.r, -this.i); };

Объект-прототип встроенных классов JavaScript также «открыт» для подобного наращивания, а это означает, что есть возможность добавлять новые методы к числам, строкам, массивам, функциям и т. д. Данная возможность уже использовалась в примере 8.5. Там мы добавляли метод bind() к классу функций в реализации ECMAScript 3, где он отсутствует:

if (!Function.prototype.bind) {

Function.prototype.bind = function(o /*, аргументы */) {

// Реализация метода bind...

};

}

Ниже приводятся несколько примеров расширения классов:

// Вызывает функцию f в цикле, количество итераций равно самому числу;

// при этом функции каждый раз передается номер итерации

// Например, чтобы вывести "привет" 3 раза:

// var n = 3;

// n.times(function(n) { console.log(n + " привет"); });

Number.prototype.times = function(f, context) {

var n = Number(this);

for(var і = 0; і < n; i++) f.call(context, i);

};

// Определяет метод ES5 String.trim(), если он отсутствует.

// Этот метод удаляет пробельные символы в начале и в конце строки и возвращает ее.

String.prototype.trim = String.prototype.trim || function() {

if (!this) return this; // He изменять пустую строку

return this.replace(/^\s+|\s+$/g, ""); // Регулярное выражение

};

// Возвращает имя функции. Если функция имеет свойство name (нестандартное),

// возвращает его значение. Иначе преобразует функцию в строку и извлекает имя из нее.

// Для неименованных функций возвращает пустую строку.

Function.prototype.getName = function() {

return this.name || this.toString().match(/function\s*([^(]*)\(/)[1];

};

Методы можно также добавлять в Object, prototype , тем самым делая их доступными для всех объектов. Однако делать это не рекомендуется, потому что в реализациях, появившихся до ECMAScript 5, отсутствует возможность сделать эти дополнительные методы неперечислимыми. При добавлении новых свойств в Object.prototype они становятся доступны для перечисления в любом цикле for/in . В разделе 9.8.1 приводится пример использования метода Object.defineProperty() , определяемого стандартом ECMAScript 5, для безопасного расширения Object, prototype .

Возможность подобного расширения классов, определяемых средой выполнения (такой как веб-броузер), зависит от реализации самой среды. Во многих веб-броузерах, например, допускается добавлять методы в HTMLElement.prototype , и такие методы будут наследоваться объектами, представляющими теги HTML в текущем документе. Однако данная возможность не поддерживается в текущей версии Microsoft Internet Explorer, что сильно ограничивает практическую ценность этого приема в клиентских сценариях.

9.5. Классы и типы

В главе 3 уже говорилось, что в языке JavaScript определяется небольшое количество типов: null, undefined , логические значения, числа, строки, функции и объекты. Оператор typeof (раздел 4.13.2) позволяет отличать эти типы. Однако часто бывает желательно интерпретировать каждый класс как отдельный тип данных и иметь возможность отличать объекты разных классов. Отличать встроенные объекты базового языка JavaScript (и объекты среды выполнения в большинстве реализаций клиентского JavaScript) можно по их атрибуту class (раздел 6.8.2), используя прием, реализованный в функции classof() из примера 6.4. Но когда класс определяется с помощью приемов, продемонстрированных в этой главе, экземпляры объектов всегда содержат в атрибуте class значение «Object», поэтому функция classof() в данной ситуации оказывается бесполезной.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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