Чтение онлайн

на главную - закладки

Жанры

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

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

* 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;

};

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

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

// Object.defineProperties(dest, src.properties.descriptors);

Properties.prototype.descriptors = function {

var о = this.o, desc = {};

this.names.forEach(function(n) {

if (lo.hasOwnProperty(n)) return;

desc[n] = Object.getOwnPropertyDescriptor(o, n);

});

return desc;

};

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

// значения и атрибуты свойств. Термин "permanent" используется для обозначения

// ненастраиваемых свойств, "readonly" - для обозначения свойств, не доступных

// для записи, и "hidden" - для обозначения неперечислимых свойств.

Поделиться:
Популярные книги

Матабар V

Клеванский Кирилл Сергеевич
5. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар V

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.00
рейтинг книги
Ермак. Телохранитель

Кукловод

Майерс Александр
4. Династия
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кукловод

Цеховик. Книга 1. Отрицание

Ромов Дмитрий
1. Цеховик
Фантастика:
попаданцы
альтернативная история
5.75
рейтинг книги
Цеховик. Книга 1. Отрицание

Девочка из прошлого

Тоцка Тала
3. Айдаровы
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Девочка из прошлого

Бастард Императора. Том 6

Орлов Андрей Юрьевич
6. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Бастард Императора. Том 6

Оружейникъ

Кулаков Алексей Иванович
2. Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Оружейникъ

Последний Паладин. Том 6

Саваровский Роман
6. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 6

Первый среди равных. Книга IX

Бор Жорж
9. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IX

Чиновникъ Особых поручений

Кулаков Алексей Иванович
6. Александр Агренев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чиновникъ Особых поручений

КАМЕРГЕРСКИЙ ПЕРЕУЛОК

Орлов Владимир Викторович
Фантастика:
фэнтези
6.00
рейтинг книги
КАМЕРГЕРСКИЙ ПЕРЕУЛОК

Эволюционер из трущоб. Том 2

Панарин Антон
2. Эволюционер из трущоб
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Эволюционер из трущоб. Том 2

Болезни ног и варикозное расширение вен. Лечение и профилактика

Нестерова Дарья Владимировна
Дом и Семья:
здоровье и красота
6.25
рейтинг книги
Болезни ног и варикозное расширение вен. Лечение и профилактика

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия