Создание клиентского класса компонентов с помощью модели прототипа
Обновлен: Ноябрь 2007
В этом разделе показано создание клиентского класса компонентов AJAX в ASP.NET. Клиентский класс AJAX, который включает базовые компоненты, поведение и классы элементов управления, определяется в ECMAScript (JavaScript) с помощью модели прототипа и нотации JSON. В нотации JSON все члены прототипа разделяются запятыми. После последнего элемента в прототипе запятой нет.
В следующем примере определяется простой клиентский класс компонентов, не имеющий практических функциональных возможностей. В этом примере показывается определение класса, производного от базового класса Component, с помощью модели прототипа:
// Declare a namespace.
Type.registerNamespace("Samples");
// Define a simplified component.
Samples.SimpleComponent = function()
{
Samples.SimpleComponent.initializeBase(this);
// Initialize arrays and objects in the constructor
// so they are unique to each instance.
// As a general guideline, define all fields here.
this._arrayField = [];
this._objectField = {};
this._aProp = 0;
}
// Create protytype.
Samples.SimpleComponent.prototype =
{
// Define set and get accessors for a property.
Set_Aprop: function(aNumber)
{
this._aProp = aNumber;
},
Get_Aprop: function()
{
return this._aProp;
},
// Define a method.
DoSomething: function()
{
alert('A component method was called.');
}
} // End of prototype definition.
// Register the class as derived from Sys.Component.
Samples.SimpleComponent.registerClass('Samples.SimpleComponent', Sys.Component);
В следующих шагах описывается определение клиентского класса AJAX ASP.NET, включая классы элементов управления:
Если класс является частью пространства имен, зарегистрируйте пространство имен путем вызова метода Type.registerNamespace.
Определите функцию-конструктор класса и его пространство имен в имени функции конструктора. В конструкторе объявите все закрытые поля. Рекомендуется объявлять закрытые переменные в конструкторе как поля экземпляра с помощью указателя this. По договоренности закрытые поля именуются с префиксом «_» (подчеркивание).
Samples.SimpleComponent = function() { Samples.SimpleComponent.initializeBase(this); this._arrayField = []; this._objectField = {}; this._aProp = 0; }
Определите класс прототипа. В прототипе определите все открытые и закрытые методы. Сюда входят методы доступа свойств и события.
Рекомендуется определять все поля в конструкторе. Определение полей в прототипе дает очень маленькую прибавку производительности по сравнению с определением в функции конструктора. Однако не все типы полей могут быть объявлены в прототипе. Например, поля типа Array и Object должны быть объявлены в конструкторе, чтобы они были уникальными для каждого экземпляра, вместо того чтобы ссылаться на них от всех экземпляров в прототипе. Это исключает непредвиденные результаты обновления свойства компонента, когда предполагалось обновление для одного экземпляра, а значение обновилось для всех экземпляров.
Примечание. Следует всегда ссылаться на элементы в прототипе посредством указателя this. Указатель this дает выигрыш в производительности, так как рабочий набор использует меньше памяти.
Зарегистрируйте класс, вызвав метод Type.registerClass. Дополнительные сведения об использовании метода Type.registerClass для регистрации класса и объявления его интерфейсов и базового класса см. в разделе Метод Type.registerClass.