JavaScript. Подробное руководство, 6-е издание, стр. 113
<b>range.methods.isPrototypeOf(г); // range.methods - объект-прототип.</b>Один из недостатков оператора
<b>instanceof</b><b>isPrototypeOf()</b><b>Array()</b>9.5.2. Свойство constructor
Другой способ определения класса объекта заключается в использовании свойства constructor. Поскольку конструкторы считаются именами классов, определение класса выполняется очень просто. Например:
<b>function typeAndValue(x) {</b><b> if (х == null) return // Значения null и undefined не имеют конструкт.</b><b> switch(x.constructor) {</b><b> case Number: return "Number: " + x; // Работает с простыми типами</b><b> case String: return "String: " + x + ;</b><b> case Date: return "Date: ” + x; // Со встроенными типами</b><b> case RegExp: return "Regexp: " + x;</b><b> case Complex: return "Complex: + x; // И с пользовательскими типами</b><b> }</b><b>}</b>Обратите внимание, что выражения в этом примере, следующие за ключевыми словами case, являются функциями. Если бы мы использовали оператор
<b>typeof</b><b>class</b>Для приема, основанного на использовании свойства
<b>constructor</b><b>instanceof</b>Кроме того, язык JavaScript не требует, чтобы каждый объект имел свойство
<b>constructor</b><b>constructor</b><b>constructor</b>9.5.3. Имя конструктора
Основная проблема использования оператора
<b>instanceof</b><b>constructor</b>Одно из возможных решений проблемы заключается в том, чтобы использовать в качестве идентификатора класса имя функции-конструктора вместо самой функции. Конструктор
<b>Array</b><b>Array</b><b>name</b><b>name</b><b>Function</b><b>getName()</b>В примере 9.4 определяется функция
<b>type(),</b><b>typeof</b><b>class</b><b>type()</b><b>classof()</b><b>Function.getName()</b>Пример 9.4. Функция type() для определения типа значения
<b>/**</b><b> * Возвращает тип значения в виде строки:</b><b> * -Если о - null, возвращает "null", если о - NaN, возвращает "пап”.</b><b> * -Если typeof возвращает значение, отличное от "object", возвращает это значение.</b><b> * (Обратите внимание, что некоторые реализации идентифицируют объекты</b><b> * регулярных выражений как функции.)</b><b> * -Если значение атрибута class объекта о отличается от "Object",</b><b> * возвращает это значение.</b><b> * -Если о имеет свойство constructor, а конструктор имеет имя, возвращает</b><b> * имя конструктора.</b><b> * -Иначе просто возвращает "Object".</b><b>**/</b><b>function type(o) {</b>