Класс Type
Предоставляет типизацию и систему отражения типов для объектно-ориентированных программных функций ECMAScript (JavaScript).
Пространство имен: отсутствует. Методы Typeявляются глобальным и не принадлежат к пространству имен.
Наследует: window
Type.registerNamespace( string );
Члены
Имя |
Описание |
---|---|
Вызывает метод базового класса с заданными аргументами. |
|
Создает метод обратного вызова, если заданы функция для обратного вызова и параметр для передачи ей. |
|
Создает функцию-делегат, хранящую контекст от его создания. Контекст определяет экземпляр объекта, на который указывает зарезервированное слово this. |
|
Возвращает реализацию метода из базового класса указанного экземпляра. |
|
Возвращает базовый тип экземпляра. |
|
Возвращает объект Array, содержащий список интерфейсов, реализуемых типом. |
|
Возвращает имя типа экземпляра. |
|
Возвращает объект Array, содержащий ссылки на все корневые пространства имен клиентского приложения. |
|
Определяет, реализует ли тип указанный интерфейс. |
|
Определяет, наследуется ли тип из указанного родительского типа. |
|
Инициализирует базовый класс и его члены в контексте заданного экземпляра, создавая модель для наследования и инициализации базовых членов. |
|
Возвращает значение, показывающее, является ли указанный тип классом. |
|
Показывает, является ли указанный тип перечислением. |
|
Получает значение, показывающее, является ли указанный тип флаговым или целым числом. |
|
Определяет, реализует ли экземпляр указанный интерфейс. |
|
Определяет, является ли объект экземпляром указанного типа или одним из его производных типов. |
|
Возвращает значение, показывающее, является ли указанный тип интерфейсом. |
|
Возвращает значение, показывающее, является ли указанный объект пространством имен. |
|
Возвращает экземпляр типа, определяемый именем типа. |
|
Регистрирует определяемый конструктором класс с дополнительным базовым типом и интерфейсами. |
|
Регистрирует перечисление. |
|
Регистрирует интерфейс, определяемый его конструктором. |
|
Регистрирует и создает пространство имен. |
|
Копирует члены из базового класса в прототип, связанный с производным классом, и продолжает процесс по цепочке наследования. Это позволяет отражать наследуемые члены производного типа. |
Заметки
Методы класса Typeобеспечивают дополнительные объектно-ориентированные программные функции кода ECMAScript (JavaScript) посредством создания системы типизации и обеспечения отражения типов. Данный класс позволяет регистрировать связи и структуры кодов, включая классы, интерфейс, базовые классы и перечисления. Для просмотра классов можно воспользоваться такими методами отражения Type, как, например, isInstanceOfType или isImplementedBy. Встроенный объект JavaScript Function является псевдонимом для Type. Поэтому для объектов пользовательского типа, созданных посредством интерфейсов API Type, доступно множество методов Type.
С обзором модели объектно-ориентированного программирования в библиотеках Библиотека Microsoft Ajax, можно ознакомиться в разделе Создание пользовательского клиентского скрипта с помощью библиотеки Microsoft Ajax.
Создание класса, производного от базового класса
Методы Type поддерживают лишь единичное наследование, но допускают использование нескольких интерфейсов. Для создания производного класса выполните перечисленные ниже действия.
При регистрации производного класса задайте базовый класс в параметре baseType метода registerClass.
Инициализируйте базу производного класса посредством вызова метода initializeBase из конструктора производного класса.
Вызов метода базового класса из члена производного класса
Методы базового класса из членов производного класса вызываются посредством вызова метода Type.callBaseMethod. Это делается в случае необходимости переопределения методов. Например, базовый класс вызывается при переопределении метода Sys.Component.dispose в производном классе.
В следующем коде показано, как регистрировать класс, производный из базового класса. Вызывается метод registerClass регистрируемого в данный момент типа. Базовый класс определен в параметре baseType. Производный класс инициализирует свой базовый класс посредством вызова метода initializeBase из своего конструктора.
Type.registerNamespace('Samples');
Samples.A = function(){}
// Register Samples.A Class
Samples.A.registerClass('Samples.A');
Samples.B = function(){}
// Register Samples.B Class
Samples.B.registerClass('Samples.B');
Samples.C = function(){
// Initialize the base.
Samples.C.initializeBase(this);
}
// Register Samples.C Class as derviving from Samples A and implementing Samples.B
Samples.C.registerClass('Samples.C', Samples.A, Samples.B);
Реализация интерфейса
Методы Type библиотек Библиотека Microsoft Ajax реализуют интерфейсы. Для реализации интерфейса необходимо вызвать метод registerClass, указав зарегистрированный интерфейс в параметре interfaceTypes. Дополнительные сведения о регистрации интерфейса см. в разделе Метод Type.registerInterface.
Пример
В следующем примере демонстрируется создание производного класса, реализующего интерфейс. В коде вызывается метод registerClass с базовым классом, указанным в параметре baseType, и интерфейсом, указанным в параметре interfaceTypes. Базовый класс инициализируется в контексте заданного экземпляра посредством вызова метода initializeBase из конструктора производного класса. Затем вызывается метод implementsInterface для определения интерфейса экземпляра класса.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Samples</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="ScriptManager01">
</asp:ScriptManager>
<script type="text/javascript">
// Register classes to test.
Type.registerNamespace('Samples');
Samples.A = function(){}
// Register Samples.A Class
Samples.A.registerClass('Samples.A');
Samples.B = function(){}
// Register Samples.B Class
Samples.B.registerClass('Samples.B');
Samples.C = function(){
// Initialize the base.
Samples.C.initializeBase(this);
}
// Register Samples.C Class as derviving from Samples A and implementing Samples.B
Samples.C.registerClass('Samples.C', Samples.A, Samples.B);
var isDerived;
isDerived = Samples.B.inheritsFrom(Samples.A);
// Output: "false".
alert(isDerived);
isDerived = Samples.C.inheritsFrom(Samples.A);
// Output: "true".
alert(isDerived);
var implementsInterface
implementsInterface = Samples.C.implementsInterface(Samples.B);
// Output: "true".
alert(implementsInterface);
</script>
</form>
</body>
</html>