Создание клиентского класса компонентов с помощью модели прототипа

Обновлен: Ноябрь 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, включая классы элементов управления:

  1. Если класс является частью пространства имен, зарегистрируйте пространство имен путем вызова метода Type.registerNamespace.

  2. Определите функцию-конструктор класса и его пространство имен в имени функции конструктора. В конструкторе объявите все закрытые поля. Рекомендуется объявлять закрытые переменные в конструкторе как поля экземпляра с помощью указателя this. По договоренности закрытые поля именуются с префиксом «_» (подчеркивание).

    Samples.SimpleComponent = function()
    {
        Samples.SimpleComponent.initializeBase(this);
    
        this._arrayField = [];
        this._objectField = {};
        this._aProp = 0;
    }
    
  3. Определите класс прототипа. В прототипе определите все открытые и закрытые методы. Сюда входят методы доступа свойств и события.

    Рекомендуется определять все поля в конструкторе. Определение полей в прототипе дает очень маленькую прибавку производительности по сравнению с определением в функции конструктора. Однако не все типы полей могут быть объявлены в прототипе. Например, поля типа Array и Object должны быть объявлены в конструкторе, чтобы они были уникальными для каждого экземпляра, вместо того чтобы ссылаться на них от всех экземпляров в прототипе. Это исключает непредвиденные результаты обновления свойства компонента, когда предполагалось обновление для одного экземпляра, а значение обновилось для всех экземпляров.

    Bb386415.alert_note(ru-ru,VS.90).gifПримечание.

    Следует всегда ссылаться на элементы в прототипе посредством указателя this. Указатель this дает выигрыш в производительности, так как рабочий набор использует меньше памяти.

  4. Зарегистрируйте класс, вызвав метод Type.registerClass. Дополнительные сведения об использовании метода Type.registerClass для регистрации класса и объявления его интерфейсов и базового класса см. в разделе Метод Type.registerClass.

См. также

Задачи

Создание настраиваемых невизуальных клиентских компонентов