MicroSoft AJAX Library JavaScript OOP 的準系統

來源:互聯網
上載者:User

對於AJAX 來說,不編寫 JavaScript 代碼即可實現很好的 AJAX 頁面幾乎是不可能的,

當然咯,你可以使用 AJAX Extensions 中的 Updatepanel 來實現一些基本的 AJAX 功能,

但是如果想比較好的掌握 AJAX ,那麼在用戶端進行 JavaScript 的編寫時無法避免的,

在 ASP.NET AJAX 中,Microsoft 對 JavaScript 進行了很好的 OOP 擴充,

使之實現了基本的 OOP 功能,比如命名空間,類,繼承,介面,反射等等OOP功能均有擴充,

所以在開發上,相比以前繁瑣的 JavaScript ,又有了更近一步的改進了。

接下來看的一個樣本呢,就是使用了 Microsoft AJAX Library 對 JavaScript 的基本 OOP 功能,

其中主要包括了命名空間的使用,類的使用,繼承的實現以及介面的一些最基本的用法。

在頁面的 Code-Behind 中沒有任何代碼,純粹在用戶端使用 JavaScript 實現,

由於比較簡單,所以直接看代碼吧,注釋也很豐富的
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

    //要使用 JavaScript 的 OOP 擴充功能,頁面上必須有一個 ScriptManager

    //這個 ScriptManager 負責下載 MicroSoft AJAX Library 的基本 JavaScript 庫
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>

    <script type="text/javascript" language="javascript">
        //最開始是使用 Global 命名空間下的 Type 來定義自己的命名空間
        Type.registerNamespace("BaoBeiMe");
        //然後便可以在這個命名空間中定義自己的類了
        //類的建構函式
        BaoBeiMe.Person = function(name, sex, age) {
            this._name = name;
            this._sex = sex;
            this._age = age;
        }
        //類的類體部分
        BaoBeiMe.Person.prototype = {
            set_sex: function(sex) {
                this._sex = sex;
            },
            get_sex: function() {
                return this._sex;
            },
            set_name: function(name) {
                this._name = name;
            },
            get_name: function() {
                return this._name;
            },
            set_age: function(age) {
                this._age = age;
            },
            get_age: function() {
                return this._age;
            },
            toString: function() {
                return String.format("我是 {0} ,性別為 {1} ,今年 {2} 歲了!",
                             this.get_name(), this.get_sex(), this.get_age());
            }
        }
        //實現自訂命名空間和自訂類的關聯
        //這個類並沒有繼承自任何類,也未實現任何介面
        BaoBeiMe.Person.registerClass("BaoBeiMe.Person", null, null);

        //再註冊一個介面 BaoBeiMe.MyInterface
        BaoBeiMe.MyInterface = function() {

        }
        BaoBeiMe.MyInterface.prototype = {
            //擷取姓名,性別,年齡
            IGetPersonMsg: function() { },
            //擷取職工號,部門,工資
            IGetEmployeeMsg: function() { }
        }
        BaoBeiMe.MyInterface.registerInterface("BaoBeiMe.MyInterface");

        //再註冊一個類,使之繼承自 BaoBeiMe.Person 類,

        //並且將會實現上面定義的 BaoBeiMe.MyInterface 介面
        BaoBeiMe.Employee = function(name, sex, age, number, department, money) {
            //調用父類的建構函式來初始化父類的基本結構
            BaoBeiMe.Employee.initializeBase(this, [name, sex, age]);
            this._number = number;
            this._department = department;
            this._money = money;
        }
        BaoBeiMe.Employee.prototype = {
            set_number: function(number) {
                this._number = number;
            },
            get_number: function() {
                return this._number;
            },
            set_department: function(department) {
                this._department = department;
            },
            get_department: function() {
                return this._department;
            },
            set_money: function(money) {
                this._money = money;
            },
            get_money: function() {
                return this._money;
            },
            //由於在父類中也存在了 toString() 方法,所以此處實質上為一種覆蓋
            //並且也通過 callBaseMethod 調用了父類的 toString()
            toString: function() {
                return String.format("{0} , 職工號為 {1} ,在 {2} 工作 , 工資為 {3} !",
                                  BaoBeiMe.Employee.callBaseMethod(this, "toString"),
                             this.get_number(), this.get_department(), this.get_money());
            },
            //這裡則是要求實現介面中的兩個方法
            IGetPersonMsg: function() {
                return String.format("我是 {0} , 性別為 {1} , 今年 {2} 歲了 !",
                                  this.get_name(), this.get_sex(), this.get_age());
            },
            IGetEmployeeMsg: function() {
                return String.format("我的職工號為 {0} , 在 {1} 工作 , 工資為 {2} 元!",
                         this.get_number(), this.get_department(), this.get_money());
            }
        }
        //註冊類時,指明父類為 BaoBeiMe.Person , 實現了介面 BaoBeiMe.MyInterface
        BaoBeiMe.Employee.registerClass("BaoBeiMe.Employee",

                                     BaoBeiMe.Person, BaoBeiMe.MyInterface);

        var person;
        var employee;
        function Button1_onclick() {
            person = new BaoBeiMe.Person("XiaoZhen", "男", "20");
            alert(person.toString());
        }

        function Button2_onclick() {
            if (person) {
                person.set_age("21");
                person.set_name("Bill");
                alert(person.toString());
            }
            else {
                alert("尚未建立 Person 對象");
            }
        }

        function Button3_onclick() {
            employee = new BaoBeiMe.Employee("XiaoZhen", "男", "20",

                             "10093323", "研發部", "15000");
            alert(employee.toString());
        }

        function Button4_onclick() {
            if (employee) {
                employee.set_name("Bill");
                employee.set_age("21");
                employee.set_money("20000");
                alert(employee.toString());
            }
            else {
                alert("尚未建立 Employee 對象");
            }
        }
        function Button5_onclick() {
            if (employee) {
                alert(employee.IGetPersonMsg());
            }
            else {
                alert("尚未建立 Employee 對象");
            }
        }

        function Button6_onclick() {
            if (employee) {
                alert(employee.IGetEmployeeMsg());
            }
            else {
                alert("尚未建立 Employee 對象");
            }
        }

    </script>

    <div>
        <input id="Button1" type="button" value="建立 Person 對象"

               onclick="return Button1_onclick()" /><br />
        <br />
        <input id="Button2" type="button" value="更改 Person 資訊"

               onclick="return Button2_onclick()" /><br />
        <br />
        <input id="Button3" type="button" value="建立 Employee 對象"

               onclick="return Button3_onclick()" /><br />
        <br />
        <input id="Button4" type="button" value="更改 Employee 資訊"

               onclick="return Button4_onclick()" /><br />
        <br />
        <input id="Button5" type="button" value="通過介面擷取基本資料"

               onclick="return Button5_onclick()" /><br />
        <br />
        <input id="Button6" type="button" value="通過介面擷取工作資訊"

               onclick="return Button6_onclick()" /></div>
    </form>
</body>
</html>

結果

單擊 ”建立 Person 對象“ 按鈕就可得到

單擊 “更改 Person 對象” 即可得到

單擊 “建立 Employee 對象” 即可得到

單擊 “更改 Employee 對象” 即可得到

單擊 “通過介面擷取基本資料” 即可得到

單擊 “通過介面擷取工作資訊” 即可得到

 

                        2010—1 –25

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.