ASP.NET AJAXをつかってみる(1)

ASP.NET AJAXを使うとサーバーサイドのプログラミングだけでAJAXを利用できます。もともとASP.NETではサーバコントロールJavaScriptをラップしていますので、その延長で考えれば違和感無く使え、UpdatePanelを使えば特別なコードの追加無しに部分的な更新ができるようになります。このような点はクライアントサイドスクリプトの開発に敷居を感じるチームには非常に魅力的に映ると思います。しかし、より便利な仕組みを提供する場合は、クライアントサイドスクリプトの利用も含めて考え、いろいろな部品や仕組みを構築することがポイントになると思っています。
ということで、ASP.NET AJAXのクライアントサイドスクリプトを調べました。

最初の第一歩ということで、まずは、ASP.NET AJAXJavaScript拡張の基礎部分である継承フレームワークがどのようになっているか興味があったので見てみました。
ポイントは、

  1. ベースクラスを__baseTypeプロパティにもっていて、
  2. コンストラクタ関数の最初でベースオブジェクトのプロパティを派生オブジェクトにコピーする

のようです。仕組みを簡略化したコードを書いてみましたのでのせておきます。

//ビルドインオブジェクトのFunctionにプロパティをコピーするメソッドを追加
Function.prototype.initializeBase = function(instance) { 
  if (this.__baseType) {
    for (var mem in this.__baseType.prototype) {
      if (!this.prototype[mem]) {
        this.prototype[mem] = this.__baseType.prototype[mem];
      }
    }
    this.__baseType.apply(instance);
  } 
}


// ベースクラスの宣言
function baseObj()
{
  baseObj.initializeBase(this);
  // コンストラクタ
  alert("baseObj");
}
// メソッドの宣言
baseObj.prototype.method = function() { alert("method"); }


// サブクラスの宣言
function subObj()
{
  subObj.initializeBase(this);
  // コンストラクタ
  alert("subObj");
}
subObj.__baseType = baseObj;

//サブクラスのインスタンス化とベースクラスメソッドの呼び出し
var t = new subObj();
t.method();