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

9.5.2. Свойство constructor

9.5.2. Свойство constructor

Другой способ определения класса объекта заключается в использовании свойства constructor. Поскольку конструкторы считаются именами классов, определение класса выполняется очень просто. Например:

function typeAndValue(x) {
  if (х == null) return // Значения null и undefined не имеют конструкт.
  switch(x.constructor) {
    case Number: return "Number: " + x; // Работает с простыми типами
    case String: return "String: " + x +  ;
    case Date: return "Date: ” + x; // Со встроенными типами
    case RegExp: return "Regexp: " + x;
    case Complex: return "Complex: + x; // И с пользовательскими типами
  }
}

Обратите внимание, что выражения в этом примере, следующие за ключевыми словами case, являются функциями. Если бы мы использовали оператор typeof или извлекали значение атрибута class объекта, они были бы строками.

Для приема, основанного на использовании свойства constructor, характерны те же проблемы, что и для приема на основе оператора instanceof. Он не всегда будет работать при наличии нескольких контекстов выполнения (например, при наличии нескольких фреймов в окне броузера), совместно использующих общие значения. Каждый фрейм имеет собственный набор функций-конструкторов: конструктор Array в одном фрейме не будет считаться идентичным конструктору Array в другом фрейме.

Кроме того, язык JavaScript не требует, чтобы каждый объект имел свойство constructor: это всего лишь соглашение, по которому по умолчанию объект-прототип создается для каждой функции, и очень просто по ошибке или преднамерение опустить свойство constructor в прототипе. Например, первые два класса в этой главе (в примерах 9.1 и 9.2) были определены так, что их экземпляры не имеют свойства constructor.

Оглавление книги


Генерация: 2.094. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз