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" - для обозначения неперечислимых свойств.
Поделиться:
Популярные книги
Последний реанорец. Том I и Том II
1. Высшая Речь
Фантастика:
фэнтези
7.62
рейтинг книги
Хозяин Теней
1. Безбожник
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
На границе империй. Том 10. Часть 6
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Мастер Трав III
3. Мастер Трав
Фантастика:
фэнтези
рпг
фантастика: прочее
попаданцы
5.75
рейтинг книги
Лекарь Империи 7
7. Лекарь Империи
Фантастика:
городское фэнтези
аниме
боевая фантастика
попаданцы
5.00
рейтинг книги
Чехов книга 3
3. Адвокат Чехов
Фантастика:
попаданцы
альтернативная история
аниме
6.00
рейтинг книги
Газлайтер. Том 6
6. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Третий. Том 3
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Страж Кодекса. Книга VI
6. КО: Страж Кодекса
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Перешагнуть пропасть
1. Перешагнуть пропасть
Фантастика:
боевая фантастика
космическая фантастика
8.38
рейтинг книги
Наномашины, Кошмар Академии! Том 10
10. Первый среди карапузов
Фантастика:
аниме
попаданцы
5.00
рейтинг книги
Ким
Приключения:
исторические приключения
7.62
рейтинг книги
Его звали Тони. Книга 5
5. Щенки косуль
Фантастика:
городское фэнтези
технофэнтези
попаданцы
7.00
рейтинг книги
Эпоха Опустошителя. Том V
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00