После того как выяснится, что некоторое значение является объектом, а не эле_ ментарным значением и не функцией, его можно передать оператору instanceof, чтобы подробнее выяснить его природу. Например, если x является массивом, тогда следующее выражение вернет true:
x instanceof Array
Слева от оператора instanceof располагается проверяемое значение, справа – имя функции_конструктора, определяющей класс объектов. Обратите внимание: объект расценивается как экземпляр собственного класса и всех его надклассов. Таким образом, для любого объекта o выражение o instanceof Object всегда вер_ нет true. Интересно, что оператор instanceof может работать и с функциями, так, все нижеследующие выражения возвращают значение true:
typeof f == "function" f instanceof Function f instanceof Object
В случае необходимости можно убедиться, что некоторый объект является эк_ земпляром определенного класса, а не одного из подклассов – для этого доста_ точно проверить значение свойства constructor. В следующем фрагменте выпол_ няется такая проверка:
var d = new Date(); // Объект Date; Date – подкласс Object
|
| Глава 9. Классы, конструкторы и прототипы
|
|
|
|
|
var isobject = d instanceof Object;
| //
| Возвращает
| true
|
var realobject = d.constructor==Object;
| //
| Возвращает
| false
|