學習Asp.net Ajax類定義和繼承文法
Syntax.js
/// <reference name="MicrosoftAjax.js"/>
Type.registerNamespace("Syntax");
Syntax.MachineState=function (){}
Syntax.MachineState.prototype={
Stopped:0,
Running:1
}
Syntax.MachineState.registerEnum("Syntax.MachineState");
Syntax.IMachine=function ()
{}
Syntax.IMachine.prototype={
get_currentState:function () {},
startup:function (){},
shutdown:function (){}
}
Syntax.IMachine.registerInterface("Syntax.IMachine");
Syntax.MachineBase=function (typeStr)
{
this._typeStr=typeStr;
this._currentState=Syntax.MachineState.Stopped;
}
Syntax.MachineBase.prototype={
get_typeStr:function (){return this._typeStr;},
get_currentState:function () {return this._currentState;},
startup:function (){ this._currentState=Syntax.MachineState.Running;},
shutdown:function (){this._currentState=Syntax.MachineState.Stopped;}
}
Syntax.MachineBase.registerClass("Syntax.MachineBase",null,Syntax.IMachine);
Syntax.Engine=function (typeStr,maxPower)
{
Syntax.Engine.initializeBase(this,[typeStr]);
this._maxPower=maxPower;
}
Syntax.Engine.prototype={
get_maxPower:function (){return this._maxPower;},
startup:function (){Syntax.Engine.callBaseMethod(this,"startup");},
shutdown:function (){Syntax.Engine.callBaseMethod(this,"shutdown");}
}
Syntax.Engine.registerClass("Syntax.Engine",Syntax.MachineBase);
if(typeof(Sys)!==undefined) Sys.Application.notifyScriptLoaded();
頁面部分
<script language="javascript" type="text/javascript">
function pageLoad()
{
var engineObj=new Syntax.Engine("DK-500",523);
engineObj.startup();
Sys.Debug.traceDump(engineObj,"engineObj");
Sys.Debug.trace( String.format("Syntax.Engine inherits From Syntax.MachineBase ?:{0}",Syntax.Engine.inheritsFrom(Syntax.MachineBase)));
Sys.Debug.trace( String.format("Syntax.Engine implements Syntax.IMachine ?:{0}",Syntax.Engine.implementsInterface(Syntax.IMachine)));
}
</script>
</div>
<fieldset title="輸出" style="width: 500px">
<legend>輸出結果</legend>
<textarea id="TraceConsole" cols="5" style="width: 495px" readonly="readonly"></textarea>
</fieldset>
輸出
心得體會:
1.從衍生類別調用基類的方法,如Syntax.js裡的
Syntax.Engine.prototype={
get_maxPower:function (){return this._maxPower;},
startup:function (){Syntax.Engine.callBaseMethod(this,"startup");},
shutdown:function (){Syntax.Engine.callBaseMethod(this,"shutdown");}
}
即是使用callBaseMethod方法,和一般的javascript中的call方法類似。
2.在類含有帶參數的建構函式時,Type.registerClass註冊類會報錯,只能用 類名.registerClass來註冊類。