Книга: JavaScript. Подробное руководство, 6-е издание
6.8.2. Атрибут class
6.8.2. Атрибут class
Атрибут class
объекта - это строка, содержащая информацию о типе объекта. Ни в ECMAScript 3, ни в ECMAScript 5 не предусматривается возможность изменения этого атрибута и предоставляются лишь косвенные способы определения его значения. По умолчанию метод toString()
(наследуемый от Object.prototype
) возвращает строку вида:
[object class]
Поэтому, чтобы определить класс объекта, можно попробовать вызвать метод toString()
этого объекта и извлечь из результата подстроку с восьмого по предпоследний символ. Вся хитрость состоит в том, что многие методы наследуют другие, более полезные реализации метода toString()
, и чтобы вызвать нужную версию toString(),
необходимо выполнить косвенный вызов с помощью метода Function.саll()
(раздел 8.7.3). В примере 6.4 определяется функция, возвращающая класс любого объекта, переданного ей.
Пример 6.4. Функция classoff()
function classof(o) {
if (о === null) return "Null";
if (o === undefined) return "Undefined";
return Object.prototype.toString.call(o).slice(8,-1);
}
Этой функции classof() можно передать любое значение, допустимое в языке JavaScript. Числа, строки и логические значения действуют подобно объектам, когда относительно них вызывается метод toString()
, а значения null
и undefined
обрабатываются особо. (В ECMAScript 5 особая обработка не требуется.) Объекты, созданные с помощью встроенных конструкторов, таких как Array
и Date
, имеют атрибут class
, значение которого совпадает с именами их конструкторов. Объекты среды выполнения обычно также получают осмысленное значение атрибута class
, однако это зависит от реализации. Объекты, созданные с помощью литералов или вызовом Object.сreate
, получают атрибут class
со значением «Object». Если вы определите свой конструктор, все объекты, созданные с его помощью, получат атрибут class
со значением «Object»: нет никакого способа установить иное значение в атрибуте class
для собственных классов объектов:
classof(null) // => "Null"
classof(1) // => "Number"
classof("") // => "String"
classof(false) // => "Boolean"
classof({}) // => "Object"
classof([]) // => "Array"
classof(/./) // => "Regexp"
classof(new DateO) // => "Date"
classof(window) // => "Window" (объект клиентской среды выполнения)
function f() {}; // Определение собственного конструктора
classof(new f()); // => "Object"
- Применение пользовательских атрибутов
- Сокращенное представление атрибутов в C#
- InterBase Classic Server под Linux
- Каталог BIN в InterBase Classic Server для Linux
- Classic
- Classic vs SuperServer
- Рекомендации по выбору архитектуры: Classic или SuperServer?
- Эффективное взаимодействие процессов архитектуры Classic Server
- Yaffil Classic Server - замена InterBase Classic 4.0
- SERVER PRIORITY CLASS
- 1.3.5. Методы и атрибуты
- CLASSIFY target