프로토타입 모델을 사용하여 클라이언트 구성 요소 클래스 만들기

Visual Studio 2010

업데이트: 2007년 11월

이 항목에서는 ASP.NET에서 AJAX 클라이언트 구성 요소 클래스를 만드는 방법을 보여 줍니다. 기본 구성 요소, 동작 및 컨트롤 클래스를 포함하고 있는 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);



다음 단계에서는 컨트롤 클래스를 포함하여 ASP.NET AJAX 클라이언트 클래스를 정의하는 방법을 설명합니다.

  1. 클래스가 네임스페이스의 일부인 경우에는 Type.registerNamespace 메서드를 호출하여 네임스페이스를 등록합니다.

  2. 생성자 함수 이름에서 클래스 생성자 함수와 해당 네임스페이스를 정의합니다. 생성자에서 모든 private 필드를 선언합니다. 생성자에 있는 private 변수는 this 포인터를 사용하여 인스턴스 필드로 선언하는 것이 좋습니다. 규칙에 따라 private 필드는 이름 앞에 밑줄 접두사가 옵니다.

    Samples.SimpleComponent = function()
    {
        Samples.SimpleComponent.initializeBase(this);
        
        this._arrayField = [];
        this._objectField = {};
        this._aProp = 0;
    }
    
  3. 클래스 프로토타입을 정의합니다. 프로토타입에서 모든 public 및 private 메서드를 정의합니다. 여기에는 속성 접근자 메서드 및 이벤트가 포함됩니다.

    생성자에 있는 모든 필드를 정의하는 것이 좋습니다. 생성자 함수 대신 프로토타입에서 필드를 정의하면 약간의 성능 이득을 얻을 수 있습니다. 그러나 프로토타입에서 모든 필드 형식을 선언할 수 있는 것은 아닙니다. 예를 들어 ArrayObject 필드 형식은 프로토타입에서 모든 인스턴스로부터 참조되는 대신 각 인스턴스마다 고유하도록 생성자에서 선언되어야 합니다. 이렇게 하면 모든 인스턴스의 값을 업데이트하는 대신 하나의 인스턴스일 것으로 예상되는 구성 요소 속성을 업데이트함으로써 발생하는 의도치 않은 결과를 방지할 수 있습니다.

    Bb386415.alert_note(ko-kr,VS.100).gif참고:

    항상 this 포인터를 통해 프로토타입에 있는 멤버를 참조하십시오. this 포인터는 작업 집합이 메모리를 덜 사용하기 때문에 성능상의 이점이 있습니다.

  4. Type.registerClass 메서드를 호출하여 클래스를 등록합니다. Type.registerClass 메서드를 사용하여 클래스를 등록하고 해당 인터페이스 및 기본 클래스를 선언하는 방법에 대한 자세한 내용은 Type.registerClass 메서드를 참조하십시오.

표시: