Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

* свойства (даже недоступные для перечисления), за исключением одноименных

* свойств, имеющихся в текущем объекте.

*/

Object.defineProperty(Object.prototype,

"extend", // Определяется Object.prototype.extend

{

writable: true,

enumerable: false, // Сделать неперечислимым

configurable: true,

value: function(o) { // Значением свойства является данная функция

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

var names = Object.getOwnPropertyNames(o);

// Обойти их в цикле

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

// Пропустить свойства, уже имеющиеся в данном объекте

if (names[i] in this) continue;

// Получить дескриптор свойства из о

var desc = Object.getOwnPropertyDescriptor(o,names[i]);

// Создать с его помощью свойство в данном объекте

Object.defineProperty(this, names[i], desc);

}

}

});

6.7.1. Устаревшие приемы работы с методами чтения и записи

Синтаксис определения свойств с методами доступа в литералах объектов, описанный разделе 6.6, позволяет определять свойства с методами в новых объектах, но, он не дает возможности получать методы чтения и записи и добавлять новые свойства с методами доступа к существующим объектам. В ECMAScript 5 для этих целей можно использовать

Object.getOwnPropertyDescriptor
и
Object.defineProperty
.

Большинство реализаций JavaScript (за исключением веб-броузера IE) поддерживали синтаксис

get
и
set
в литералах объектов еще до принятия стандарта ECMAScript 5. Эти реализации поддерживают нестандартный, устаревший API для получения и назначения методов чтения и записи. Этот API состоит из четырех методов, доступных во всех объектах.
__lookupGetter__
и
__lookupSetter__
возвращают методы чтения и записи для указанного свойства. А методы
__defineGetter__
и
__defineSetter__
позволяют определить метод чтения или записи:

в первом аргументе они принимают имя свойства, а во втором - метод чтения или записи. Имена всех этих методов начинаются и оканчиваются двумя символами подчеркивания, чтобы показать, что они являются нестандартными методами. Эти нестандартные методы не описываются в справочном разделе.

6.8. Атрибуты объекта

Все объекты имеют атрибуты

prototype
,
class
и
extensible
. Все эти атрибуты описываются в подразделах ниже; в них также рассказывается, как получать и изменять значения атрибутов (если это возможно).

6.8.1. Атрибут prototype

Атрибут

prototype
объекта определяет объект, от которого наследуются свойства. (Дополнительные сведения о прототипах и наследовании прототипов приводятся в разделах 6.1.3 и 6.2.2.) Этот атрибут играет настолько важную роль, что обычно мы будем говорить о нем как о «прототипе объекта о», а не как об «атрибуте
prototype
объекта о». Кроме того, важно понимать, что когда в программном коде встречается ссылка
prototype
, она обозначает обычное свойство объекта, а не атрибут
prototype
.

Атрибут

prototype
устанавливается в момент создания объекта. В разделе 6.1.3 уже говорилось, что для объектов, созданных с помощью литералов, прототипом является
Object.prototype
. Прототипом объекта, созданного с помощью оператора
new
, является значение свойства
prototype
конструктора. А прототипом объекта, созданного с помощью
Object.сreate,
становится первый аргумент этой функции (который может иметь значение
null
).

  • Читать дальше
  • 1
  • ...
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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