Дэвид Флэнаган - 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.20. Более простое определение неизменяемого класса

function Range(from, to) { // Конструктор неизменяемого класса Range

this.from = from;

this.to = to;

freezeProps(this); // Сделать свойства неизменяемыми

}

Range.prototype = hideProps({ // Определить неперечислимые свойства прототипа

constructor: Range,

includes: function(x) { return this.from <= x && x <= this.to; },

foreach: function(f) {for(var x=Math.ceil(this.from);x<=this.to;x++) f(x);},

toString: function() { return "(" + this.from + "..." + this.to + ")"; }

});

9.8.3. Сокрытие данных объекта

В разделе 9.6.6 и в примере 9.10 было показано, как можно использовать переменные и аргументы функции-конструктора для сокрытия данных объекта, создаваемого этим конструктором. Недостаток этого приема заключается в том, что в ECMAScript 3 допускается возможность замещения методов доступа к этим данным. Стандарт ECMAScript 5 позволяет обеспечить более надежное сокрытие частных данных за счет определения методов доступа к свойствам, которые не могут быть удалены. Этот способ демонстрируется в примере 9.21.

Пример 9.21. Класс Range со строго инкапсулированными границами

// Эта версия класса Range является изменяемой, но она следит за своими

// границами, обеспечивая выполнение условия from <= to.

function Range(from, to) {

// Проверить соблюдение условия при создании

if (from > to) throw new Error("Range: значение from должно быть <= to");

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

function getFrom() { return from; }

function getTo() { return to; }

function setFrom(f) { // He позволяет устанавливать значение from > to

if (f <= to) from = f;

else throw new Error("Range: значение from должно быть <= to");

}

function setTo(t) { // He позволяет устанавливать значение to < from

if (t >= from) to = t;

else throw new Error("Range: значение to должно быть >= from");

}

// Создать перечислимые, ненастраиваемые свойства с методами доступа

Object.defineProperties(this, {

from: {getigetFrom,

set:setFrom,

enumerable:true,

configurable:false},

to: { get: getTo,

set: setTo,

enumerable:true,

configurable:false }

});

}

// Настройка объекта-прототипа осталась такой же, как и в предыдущих примерах.

// Обращение к методам экземпляров чтения свойств from и to выполняется так,

// как если бы они были простыми свойствами.

Range.prototype = hideProps({

constructor: Range,

includes: function(x) {

return this.from <= x && x <= this.to: },

foreach: function(f) {

for(var x=Math.ceil(this.from);x<=this.to;x++) f(x);},

toString: function() { return "(" + this, from + ”..." + this, to + ")"; }

});

9.8.4. Предотвращение расширения класса

Возможность расширения классов за счет добавления новых методов в объект-прототип обычно рассматривается как характерная особенность языка JavaScript. Стандарт ECMAScript 5 позволяет при желании предотвратить такую возможность. Функция Object.preventExtensions() делает объект нерасширяемым (раздел 6.8.3) - в такой объект невозможно добавить новые свойства. Функция Object.seal() идет еще дальше: она не только предотвращает добавление новых свойств, но и делает все имеющиеся свойства ненастраиваемыми, предотвращая возможность их удаления. (Однако ненастраиваемое свойство по-прежнему может быть доступно для записи и по-прежнему может быть преобразовано в свойство, доступное только для чтения.) Чтобы предотвратить возможность расширения объекта Object.prototype , можно просто записать:

Object.seal(Object.prototype);

Другая динамическая особенность языка JavaScript - возможность замены методов объекта:

var original_sort_method = Array.prototype.sort;

Array.prototype.sort = function() {

var start = new Date();

original_sort_method.apply(this, arguments);

var end = new Date();

console.log("Сортировка массива заняла " + (end - start) +

" миллисекунд.");

};

Предотвратить такую замену можно, объявив методы экземпляров доступными только для чтения. Сделать это можно с помощью вспомогательной функции freezeProps(), объявленной выше. Другой способ добиться этого эффекта заключается в использовании функции Object.freeze(), которая выполняет те же действия, что и функция Object.seal(), и дополнительно делает все свойства ненастраиваемыми и доступными только для чтения.

Свойства, доступные только для чтения, обладают одной особенностью, о которой необходимо помнить при работе с классами. Если объект о наследует свойство р , доступное только для чтения, попытка присвоить значение свойству о.р будет завершаться неудачей без создания нового свойства в объекте о . Если потребуется переопределить унаследованное свойство, доступное только для чтения, можно воспользоваться функциями Object.defineProperty(), Object.defineProperties() или Object.create(), чтобы создать новое свойство. Это означает, что, когда методы экземпляров класса делаются доступными только для чтения, это существенно осложняет возможность их переопределения в подклассах.

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

Object.freeze(enumeration.values);

Object.freeze(enumeration);

Обратите внимание, что применение функции Object.freeze() к типу перечисления исключает возможность использования свойства objectId , как было показано в примере 9.17. Решение этой проблемы состоит в том, чтобы прочитать значение свойства objectId (вызвать соответствующий метод чтения и установить внутреннее свойство) перечисления только один раз, перед тем как его зафиксировать.

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

Интервал:

Закладка:

Сделать


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

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




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


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


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

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