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

9.5.1. Оператор instanceof

9.5.1. Оператор instanceof

Оператор instanceof был описан в разделе 4.9.4. Слева от оператора должен находиться объект, для которого выполняется проверка принадлежности к классу, а справа - имя функции-конструктора, представляющей класс. Выражение о instanceof с возвращает true, если объект о наследует с.prototype. При этом наследование необязательно может быть непосредственным. Если о наследует объект, который наследует объект, наследующий с.prototype, выражение все равно вернет true.

Как отмечалось выше в этой главе, конструкторы выступают в качестве наружной вывески классов, а фундаментальная идентификация классов проводится прототипами. Несмотря на то что в операторе instanceof используется функция» конструктор, этот оператор в действительности проверяет прототип, наследуемый объектом, а не конструктор, с помощью которого он был создан.

Если необходимо проверить, входит ли некоторый определенный прототип в цепочку прототипов объекта без использования функции-конструктора, как промежуточного звена, можно воспользоваться методом isPrototypeOf(). Например, ниже показано, как проверить принадлежность объекта г к классу range, определенному в примере 9.1:

range.methods.isPrototypeOf(г); // range.methods - объект-прототип.

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

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


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