プロトタイプ モデルを使用したクライアント コンポーネント クラスの作成
更新 : 2007 年 11 月
ここでは、ASP.NET で AJAX クライアント コンポーネント クラスを作成する方法について説明します。AJAX クライアント クラスは、基本コンポーネント、動作、およびコントロール クラスを含んでおり、プロトタイプ モデルと JSON 表記を使用して ECMAScript (JavaScript) で定義されます。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 クライアント クラスを定義する方法について説明します。
クラスが名前空間の一部である場合は、Type.registerNamespace メソッドを呼び出して名前空間を登録します。
コンストラクタ関数名にクラス コンストラクタ関数と名前空間を定義します。コンストラクタで、すべてのプライベート フィールドを宣言します。this ポインタを使用して、コンストラクタ内のプライベート変数をインスタンス フィールドとして宣言することをお勧めします。名前付け規則により、プライベート フィールドの前にはアンダースコアを付けます。
Samples.SimpleComponent = function() { Samples.SimpleComponent.initializeBase(this); this._arrayField = []; this._objectField = {}; this._aProp = 0; }
クラス プロトタイプを定義します。プロトタイプで、すべてのパブリック フィールドとプライベート フィールドを定義します。これには、プロパティ アクセサ メソッドとイベントが含まれます。
コンストラクタ内ですべてのフィールドを定義することをお勧めします。コンストラクタ関数内ではなくプロトタイプ内でフィールドを定義すると、パフォーマンスはあまり改善されません。ただし、フィールドの種類をすべてプロトタイプで宣言できるわけではありません。たとえば、Array と Object のフィールドの種類は、すべてのインスタンスからプロトタイプ内で参照するのではなく、各インスタンスに固有になるように、コンストラクタ内で宣言する必要があります。これにより、1 つのインスタンスとする必要があるコンポーネント プロパティが予期せずに更新されるのを回避できますが、すべてのインスタンスの値が更新されます。
メモ : 常に this ポインタを使用して、プロトタイプ内のメンバを参照します。作業セットが使用するメモリが少ないため、this ポインタにはパフォーマンス上の利点があります。
Type.registerClass メソッドを呼び出して、クラスを登録します。Type.registerClass メソッドを使用してクラスを登録し、インターフェイスと基本クラスを宣言する方法の詳細については、「Type.registerClass メソッド」を参照してください。