Microsoft AJAX Library中的物件導向

來源:互聯網
上載者:User

OO
· 提高複用性,提高可維護性
· 可以使用各種成熟的設計模式

命名空間
    ·除了避免命名衝突,還有比較重要的就是能使程式員方便的找到他們所需要的類型和類,
      在開發中發現很多程式員命名空間的名字起的不知道什麼意思,然後某個命名空間下的類
      的功能也不知道做什麼用的,兩種業務相關的類放在一個命名空間下,造成了代碼的層次
      混亂,不方面以後維護。
      註冊命名空間 Type.registerNamespace("Namespace");


    ·定義建構函式
         類的建構函式為function定義
         function myFunction(){}
         var myfun = new myFunction();
                  

    ·定義成員
         microsoft ajax library 物件導向類型系統將 get_ 和 set_ 開頭的方法認作屬性
         
        【code demo】:
         MyNamespace.Myclass = function(param1, ...) //定義建構函式
         {
            this._myProperty = null; 
         }
          //定義屬性,方法成員 , 注意各個成員之間需要用逗號隔開,要不會出錯
         MyNamespace.MyClass.prototype =
         {
            get_myProperty:function()
            {return this._myProperty;},

            set_myProperty:function(value)
            {this._myProperty=value;},

            methodName:function(){}
         }  
      

    ·註冊類

        【code demo】:
         MyNamespace.Myclass = function(param1, ...)
         {
            //定義建構函式
         }
         MyNamespace.MyClass.prototype =
         {
            //定義屬性,方法成員
         } 
         MyNamespace.MyClass.registerClass('MyNamespace.MyClass'); //註冊類

使用Demo
    【code demo】:
     <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <script language="javascript" type="text/javascript">
       
        Type.registerNamespace("dongdeNamespace");
       
        dongdeNamespace.Worker = function(name)
        {
           this._name = name ? name:"(unknown)";
           this._bornyear = 0;
        }
       
        dongdeNamespace.Worker.prototype=
        {
           get_name:function()
           {
              return this._name;
           },
          
          
           get_bornyear:function()
           {
             
              return this._bornyear;
           },
           set_bornyear:function(value)
           {
              this._bornyear=value;
          
           },
          
          
           getAge:function()
           {
              return 2008-this._bornyear;
          
           },
          
           getWorkerDescript:function()
           {
             
              return String.format("{0}年齡:{1},出生於:{2}",this._name,this.getAge(),this.get_bornyear()); //不能去除this
           }     
       
        }
       
        dongdeNamespace.Worker.registerClass("dongdeNamespace.Worker");
       
       
        var worker = new dongdeNamespace.Worker("dongde");
        worker.set_bornyear(1981);    //這裡注意為屬性賦值的方式
        alert(  worker.getWorkerDescript() );
       
       
       
        </script>   

抽象類別
     ·包含抽象方法的類為抽象類別
     ·microsoft ajax library 物件導向類型系統 將包含運行後直接拋出異常的方法的類叫做抽象類別,
       直接拋出異常的方法叫做抽象方法
    
     ·繼承,調用父類的建構函式,有父類的類必須調用父類的建構函式(否側會丟失繼承效果)
       調用父親類的建構函式文法 MyNamespace.MyClass.initializeBase(this,[param1,...]);
       [param1,...]參數 表示父類的建構函式的參數名,注意是參數名不是參數值

     ·註冊時必須提供父類
       MyNamespace.MyClass.registerClass("MyNamespace.MyClass",MyNamespace.parentclass);

     ·定義同名的方法就可以覆蓋父類的抽象方法

     ·toString方法無法繼承,toString方法是javascript系統內建的一個方法,父類和子類作為對象都有toString方法,
       但是沒有繼承

     ·調用父類的方法 MyNamespace.MyClass.callBaseMethod(this,"MethodName",[param1,...]); //MethodName是父類的方法名
       this.MethodName();  //表示調用子類自己的MethodName方法
    

      【code demo】:
 
          <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <script language="javascript" type="text/javascript">
       
        Type.registerNamespace("dongdeNamespace");
       
        dongdeNamespace.Worker = function(name)
        {
           this._name = name ? name:"(unknown)";
           this._bornyear = 0;
        }
       
        dongdeNamespace.Worker.prototype=
        {
           get_name:function()
           {
              return this._name;
           },
          
          
           get_bornyear:function()
           {
             
              return this._bornyear;
           },
           set_bornyear:function(value)
           {
              this._bornyear=value;
          
           },
          
          
           getAge:function()
           {
              return 2008-this._bornyear;
          
           },
          
          
           getWorkerDescript:function()
           {
             
              return String.format("{0}年齡:{1},出生於:{2}",this._name,this.getAge(),this.get_bornyear());
           },   
       
           //抽象方法
           getSalary:function()
           {
              throw Error.notImplemented();
          
           }
        }
       
      
       
       
        /////////////////////////////////////////////////////////////////
        dongdeNamespace.Manager = function(name)
        {
           dongdeNamespace.Manager.initializeBase(this,[name]);
       
        }
       
        dongdeNamespace.Manager.prototype=
        {
           getSalary:function()
           {
              return 10000;
          
           }
       
        }
       
        //////////////////////////////////////////////////////////////////
        dongdeNamespace.AdvanceManager = function(name)
        {
           dongdeNamespace.AdvanceManager.initializeBase(this,[name]);
       
        }       
       
        dongdeNamespace.AdvanceManager.prototype=
        {
           getWorkerDescript:function()
           {
             
              return dongdeNamespace.AdvanceManager.callBaseMethod(this,"getWorkerDescript")+"我工資高吧";
           },
  
           getSalary:function()
           {
              return 18000;
          
           }         

       
        }
       
       
       
    
        dongdeNamespace.Manager.registerClass("dongdeNamespace.Manager",dongdeNamespace.Worker);   
       
        var worker = new dongdeNamespace.Manager("dongde");
        worker.set_bornyear(1981);
        alert(  worker.getWorkerDescript() +"工資:"+ worker.getSalary() );
       
       
       
        dongdeNamespace.AdvanceManager.registerClass("dongdeNamespace.AdvanceManager",dongdeNamespace.Worker); 
        var worker2 = new dongdeNamespace.AdvanceManager("dongde2");
        worker2.set_bornyear(1961);
        alert(  worker2.getWorkerDescript() +"工資:"+ worker2.getSalary() );
       
        </script>

----未完,請看續篇http://www.cnblogs.com/Brave-Heart/archive/2008/06/26/1230619.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.