Дэвид Флэнаган - 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.8.5. Подклассы и ECMAScript 5

В примере 9.22 демонстрируется порядок создания подклассов с использованием возможностей ECMAScript 5. В нем определяется класс stringSet, наследующий класс AbstractWritableSet из примера 9.16. Основная особенность этого примера заключается в использовании функции Object.сreate() для создания объекта-прототипа, наследующего прототип суперкласса, и в определении свойств вновь созданного объекта. Как уже отмечалось выше, основная сложность этого подхода заключается в необходимости использовать неудобные дескрипторы свойств.

Другой интересной особенностью этого примера является передача значения null функции Object.сreate() при создании объекта, не наследующего ничего. Этот объект используется для хранения элементов множества, а тот факт, что он не имеет прототипа, позволяет вместо метода hasOwnProperty() использовать оператор in .

Пример 9.22. StringSet : определение подкласса множества с использованием ECMAScript 5

function StringSet() {

this.set = Object.create(null); // Создать объект без прототипа

this.n = 0;

this.add.apply(this, arguments);

}

// Обратите внимание, что Object.create позволяет обеспечить наследование

// прототипа суперкласса и определить методы за счет единственного вызова.

// Поскольку при создании свойств мы не указываем значения атрибутов writable,

// enumerable и configurable, они по умолчанию получают значение false.

// Доступность методов только для чтения усложняет их переопределение в подклассах.

StringSet.prototype = Object.create(AbstractWritableSet.prototype, {

constructor: { value: StringSet },

contains: { value: function(x) { return x in this.set; } }.

size: { value: function(x) { return this.n; } },

foreach: { value: function(f,c) { Object.keys(this.set).forEach(f.c); } }.

add: {

value: function() {

for(var і = 0; і < arguments.length; i++) {

if (!(arguments[i] in this.set)) {

this.set[arguments[i]] = true;

this.n++;

}

}

return this;

}

),

remove: {

value: function() {

for(var і = 0; і < arguments.length; i++){

if (arguments[i] in this.set) {

delete this.set[arguments[i]];

this, n--;

}

}

return this;

}

}

});

9.8.6. Дескрипторы свойств

В разделе 6.7 дается описание дескрипторов свойств, введенных стандартом ECMAScript 5, но там отсутствуют примеры, демонстрирующие различные случаи их использования. Мы завершим этот раздел, посвященный особенностям ECMAScript 5, расширенным примером, демонстрирующим многие операции со свойствами, допустимые в ECMAScript 5. Программный код в примере 9.23 добавляет в Object.prototype метод properties() (разумеется, недоступный для перечисления). Значение, возвращаемое этим методом, является объектом, представляющим список свойств и обладающим полезными методами для отображения свойств и атрибутов (которые могут пригодиться при отладке). Его можно использовать для получения дескрипторов свойств (на случай, если потребуется реализовать копирование свойств вместе с их атрибутами) и для установки атрибутов свойств (благодаря чему он может использоваться как альтернатива функциям hideProps() и freezeProps(), объявленным ранее). Этот единственный пример демонстрирует большинство особенностей свойств в ECMAScript 5, а также применение методики модульного программирования, о которой будет рассказываться в следующем разделе.

Пример 9.23. Особенности свойств в ECMAScript 5

/*

* Определяет метод properties() в Object.prototype, возвращающий объект, который

* представляет указанные свойства объекта, относительно которого был вызван метод

* (или все собственные свойства объекта, если метод был вызван без аргументов).

* Возвращаемый объект имеет четыре полезных метода:

* toString(), descriptors(), hide() и show().

*/

(function namespace() { // Обернуть все в частную область видимости функции

// Эта функция будет превращена в метод всех объектов

function properties() {

var names; // Массив имен свойств

if (arguments.length == 0) // Все собственные свойства объекта this

names = Object.getOwnPropertyNames(this);

else if (arguments.length == 1 && Array.isArray(arguments[0]))

names = arguments[0]; // Или массив указанных свойств

else // Или имена в списке аргументов

names = Array.prototype.splice.call(arguments, 0);

// Вернуть новый объект Properties, представляющий указанные свойства return

new Properties(this, names);

}

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

// Это единственное значение, экспортируемое из частной области видимости функции.

Object.defineProperty(Object.prototype, "properties", {

value: properties,

enumerable: false,

writable: true,

configurable: true

});

// Следующая функция-конструктор вызывается функцией properties().

// Класс Properties представляет множество свойств объекта,

function Properties(), names) {

this.о = о; // Объект, которому принадлежат свойства

this.names = names; // Имена свойств

}

// Делает неперечислимыми свойства, представленные объектом this

Properties.prototype.hide = function() {

var о = this.o, hidden = { enumerable: false };

this.names.forEach(function(n) {

if (o.hasOwnProperty(n))

Object.defineProperty(o, n, hidden);

});

return this;

};

// Делает свойства ненастраиваемыми и доступными только для чтения

Properties.prototype.freeze = function() {

var о = this.o, frozen = { writable: false, configurable: false };

this.names.forEach(function(n) {

if (o.hasOwnProperty(n))

Object.defineProperty(o, n, frozen);

}):

return this;

};

// Возвращает объект, отображающий имена свойств в дескрипторы.

// Может использоваться для реализации копирования свойств вместе с их атрибутами:

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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