<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

          

    06 年用 javascript 寫過上千行的應用,現(xiàn)在的項目中經(jīng)常用到 javascript ,說不熟悉吧也熟悉了。說熟悉吧, javascript 的面向對象部分還是比較陌生。實際上自己沒有系統(tǒng)學習過 javascript ,沒有完整看過一本 javascript 的書。今天決定網(wǎng)上定兩本書,一本是《 javascript 高級程序設計》《 javascript dom 編程藝術》,想著也該較系統(tǒng)的學習一下,項目中也要大量應用到這些了,必定下一個項目我們將采用 AJAX ??偨Y下自己學 ajax 時候補充的一點 javascript 知識。

     

    一、 javascript 面向對象特性

     

    1.       javascript 中的函數(shù)

    javascript function 對象在調(diào)用過程中具有一個 arguments 屬性,它是由腳本解釋器創(chuàng)建的,這也是創(chuàng)建 arguments 唯一途徑。 Arguments 對象可以看作是一個 Array 對象,它具有 length 屬性,可以通過序號訪問每一個參數(shù)。 Arguments 有個 callee 屬性,可以獲取到執(zhí)行的 function 對象的引用。

    eg

    funtion f1 n

    {

           if(n<=0)

    {

           return 1;

    }else

    {

           return n*arguments.callee(n-1);// 實際同 return n*f1(n-1);

    }

    上例利用 callee 屬性實現(xiàn)了匿名的遞歸調(diào)用。

     

    2.       apply call 方法:

    apply 方法和 call 方法有形似之處,兩者都將函數(shù)綁定到其他對象上執(zhí)行。

    舉例:

    obj1.fun1.apply(obj2,[“test”]);

    含義:是將 obj1 對象的方法 fun1 綁定到 對象 obj2 上,并使用參數(shù) test 。

    obj1.fun1.call(obj2,“test”);

    含義同上,他們區(qū)別是在 apply 參數(shù)以 array 對象傳入。而 call 是依次傳入?yún)?shù)的。

     

    3.       this with

    this 在對象的方法被調(diào)用時候,指代調(diào)用該方法的對象實例。

    使用 with 語句時,代碼變得更加短且易讀:

    沒有用 with 之前

    x = obj.fun1(“a”);

    y = obj.fun2(“b”);

    with 之后,就變成:

    with(obj)

    {

    x=fun1(“a”);

    y=fun2(“b”);

    }

    4.       for in

    javascript 中可以使用 for in 語句遍歷對象中所有屬性和方法。例如下面的代碼就遍歷了 test1 對象的屬性和方法,如果是屬性則輸出屬性值,如果是方法則執(zhí)行方法。

     

    for(p in t)

    {

           if(typeof(t[p])==”function”)

           {

                  t[p]();

           }else

           {

                  alert(t[p]);

           }

    }

     

    二、 javascript 面向對象編程實現(xiàn)

     

           對比 java 中面向對象編程中繼承,以及封裝,多態(tài)等常見概念,進行總結。

    1.       類的聲明

    首先來看下類的實現(xiàn),前面已經(jīng)使用了一種聲明類的方法。

     

    function test1()

    {

           this.prop1 = “prop1”;

           this.prop2 =”prop2”;

           this.fun1 = function()

    {

           ……

    }

    }

     

    上面代碼聲明了兩個公有屬性,和一個方法。大家都知道類里除了公有成員還可能還有一些私有成員變量,但是 javascript 并沒有提供相應的機制來定義私有成員變量,不過利用一些 javascript 的小技巧就可以實現(xiàn)私有成員變量。如下:

    function test1 ()

    {

           var prop3 = “test”;

           this.prop1 = “prop1”;

           this.prop2 =”prop2”;

           this.fun1 = function()

    {

           ……

    }

    }

     

    上面代碼通過 var 關鍵字聲明了一個局部變量 prop3 ,其作用域是 test1 類定義的內(nèi)部,這樣就實現(xiàn)了變量私有化。

           另外在 javascript 中可以通過下面的方式聲明靜態(tài)屬性和靜態(tài)方法。

           < script LANGUAGE =" JavaScript " >

        function test ( n )

        {

           

        }

        test . staticProp = " static prop test!" ;

        test . staticMechod = function ()

        {

            alert ( "adfadfd" );

        }

       

        alert ( test . staticProp );

        test . staticMechod ();

     

    </ script >

    實際上沒有感覺到 javascript 中靜態(tài)的必要性(不像 java ),也許是我對書本理解的不夠,或者是應用太少。如果有讀者朋友,有不同認識,歡迎發(fā)表看法,大家交流。

     

    如果要聲明一個類的實例屬性或方法,可以使用 javascript 中對象的 prototype 屬性。例如:

    test1.prototype.prop1 = “prop1”;

    test1.prototype.method1 = function(){}

    利用 prototype 屬性,可以實現(xiàn)另外一種類的聲明方式:

    < script LANGUAGE =" JavaScript " >

        function test ()

        {}

            test . prototype =

            {

                p1 : "p1" ,

                p2 : "p2" ,

                f1 : function ()

                {

                    alert ( "f1" );

                }

            }

            var te = new test ();

            te . f1 ();

    </ script >

    上面使用 {} 的方式聲明了一個匿名對象,大括號內(nèi)用逗號將屬性與值的列表分隔開。可以看到,采用 prototype 的方式聲明類,代碼更加簡潔明了。因此這種方式在很多 AJAX 框架中得到廣泛應用。

     

    2.       繼承

    javascript 本身并沒有提供繼承,那么如何實現(xiàn)類的繼承呢?最直接大方法是復制原方法,然后在里面加入新成員。但這樣做實在是落后,因為當原類變化,新繼承的類還要手動變化,容易出錯。而下面這種用 for in 控制的復制就不那么容易出錯了。

     

    function test1()

    {

           for(p in test.prototype)

           {

                  test1.prototype[p] = test.prototype[p];

           }

           test1.prototype.newmethod = function()

    {

               alert(“newfunction”);

    }

    }

     

    3.       多態(tài)

    多態(tài)的是實現(xiàn)可以采用和繼承類似的方法。首先定義一個抽象類,其中可以調(diào)用一些虛方法,虛方法在抽象類中沒有定義,而是通過其具體實現(xiàn)類來實現(xiàn)的。

     

    < script LANGUAGE =" JavaScript " >

        // 一個繼承方法

        Object . extend = function ( destination , source )

        {

            for ( pro in source )

            {

                destination [ pro ] = source [ pro ];

            }

            return destination ;

        }

        // 一個基類

       

        function base (){}

        base . prototype =

        {

            f1 : function ()

            {

                this . oninit ();

            }

        }

        // 擴展1

        function test1 ()

        {

           

        }

        test1 . prototype = Object . extend (

        {

            prop : "prop" ,

            oninit : function ()

            {

                alert ( this . prop );

            }

        }, base . prototype );

        // 擴展2

        function test2 ()

        {

           

        }

        test2 . prototype = Object . extend (

        {

            prop2 : "prop2" ,

            oninit : function ()

            {

                alert ( this . prop2 );

            }

        }, base . prototype );

       

        // 測試

        var t1 = new test1 ();

        t1 . f1 ();

        var t2 = new test2 ();

        t2 . f1 ();

       

    </ script >

     

    posted on 2007-06-14 01:30 -274°C 閱讀(4772) 評論(4)  編輯  收藏 所屬分類: web前端


    FeedBack:
    # re: javascript 面向對象特性與編程實現(xiàn)
    2007-06-14 01:50 | 山風小子
    我來捧捧場 :)  回復  更多評論
      
    # re: javascript 面向對象特性與編程實現(xiàn)[未登錄]
    2007-06-14 08:50 | G_G
    有 prototype 代碼哦  回復  更多評論
      
    # re: javascript 面向對象特性與編程實現(xiàn)[未登錄]
    2007-06-14 08:52 | JAVA虛擬機
    ding   回復  更多評論
      
    # re: javascript 面向對象特性與編程實現(xiàn)
    2007-06-16 16:38 | itkui
    JavaScript是挺好的。
    Ajax項目對它要求蠻高的。  回復  更多評論
      

    常用鏈接

    留言簿(21)

    隨筆分類(265)

    隨筆檔案(242)

    相冊

    JAVA網(wǎng)站

    關注的Blog

    搜索

    •  

    積分與排名

    • 積分 - 914354
    • 排名 - 40

    最新評論

    主站蜘蛛池模板: 日韩成人免费在线| 国产成人免费网站| 久久亚洲欧洲国产综合| 香港经典a毛片免费观看看| 免费黄色大片网站| 日韩成人精品日本亚洲| 全黄a免费一级毛片人人爱| 美女露隐私全部免费直播| 日本不卡视频免费| 免费一级毛片在线播放放视频| 国产色婷婷精品免费视频| 黄色一级免费网站| 亚洲真人无码永久在线| 嫩草影院在线播放www免费观看| 亚洲成av人片天堂网| 中国xxxxx高清免费看视频| 亚洲免费二区三区| 日日操夜夜操免费视频| 日韩在线视频播放免费视频完整版| 亚洲午夜激情视频| 久久国产精品免费网站| 91亚洲自偷在线观看国产馆| 毛片在线看免费版| 一级美国片免费看| 亚洲电影一区二区| 最近的免费中文字幕视频| 一道本不卡免费视频| 色婷婷亚洲十月十月色天| 最近中文字幕mv免费高清电影 | 亚洲天堂中文字幕在线| 99免费在线视频| 亚洲一区二区三区四区视频| 国产精品无码一区二区三区免费 | 久久久久亚洲精品无码网址色欲| 四虎永久精品免费观看| 东方aⅴ免费观看久久av| 国产精品亚洲精品青青青| 亚洲av无码成人精品国产| 久久影院亚洲一区| 最近中文字幕无免费| 香港特级三A毛片免费观看|