Asp.net Ajax【客户端一】类语法

学习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来注册类。

posted @ 2008-04-25 11:05  DreamTrue  阅读(211)  评论(0编辑  收藏  举报