Книга: JavaScript. Подробное руководство, 6-е издание
8.7.7. Вызываемые объекты
8.7.7. Вызываемые объекты
В разделе 7.11 мы узнали, что существуют объекты, «подобные массивам», которые не являются настоящими массивами, но во многих случаях могут интерпретироваться как массивы. Аналогичная ситуация складывается с функциями. Вызываемый объект - это любой объект, который может быть вызван в выражении вызова функции. Все функции являются вызываемыми объектами, но не все вызываемые объекты являются функциями.
Вызываемые объекты, не являющиеся функциями, встречаются в современных реализациях JavaScript в двух ситуациях. Во-первых, веб-броузер IE (версии 8 и ниже) реализует клиентские методы, такие как Window.alert()
и Document.getElementsByld(),
используя вызываемые объекты, а не объекты класса Function
. Эти методы действуют в IE точно так же, как в других броузерах, но они не являются объектами Function
. В IE9 был выполнен переход на использование настоящих функций, поэтому со временем эта разновидность вызываемых объектов будет использоваться все меньше и меньше.
Другой типичной разновидностью вызываемых объектов являются объекты RegExp
- во многих броузерах предоставляется возможность напрямую вызывать объект RegExp
, как более краткий способ вызова его метода ехес().
Эта возможность не предусматривается стандартом JavaScript. В свое время она была реализована компанией Netscape и подхвачена другими производителями для обеспечения совместимости. Старайтесь не писать программы, опирающиеся на возможность вызова объектов RegExp
: данная особенность, скорее всего, будет объявлена нерекомендуемой и будет ликвидирована в будущем. Оператор typeof
не во всех броузерах одинаково распознает вызываемые объекты RegExp
. В одних броузерах он возвращает строку «function», а в других - «object».
Если в программе потребуется определить, является ли объект настоящим объектом функции (и обладает методами функций), сделать это можно, определив значение атрибута class (раздел 6.8.2), использовав прием, продемонстрированный в примере 6.4:
function isFunction(x) {
return Object.prototype.toString.call(x) === "[object Function]";
}
Обратите внимание, насколько эта функция isFunction()
похожа на функцию isArray(),
представленную в разделе 7.10.
- ЧАСТЬ IV. База данных и ее объекты.
- Физические объекты
- Объекты без прототипов
- Объекты базы данных
- Форматирующие объекты XSL-FO
- Практическая работа 10. Объекты на Рабочем столе
- Объекты WordArt
- Практическая работа 41. Графические объекты в документах Word
- Пользовательские объекты
- Второстепенные объекты теста
- 1.3.1. Объекты
- Объекты