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

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

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

    一直都在用JavaScript完成一些客戶端的功能,每次應(yīng)用都是到網(wǎng)上現(xiàn)查現(xiàn)用,卻從來沒有系統(tǒng)的學(xué)習(xí)一下JavaScript。

    有一次企圖偷窺一下它的內(nèi)涵,發(fā)現(xiàn)身邊一個(gè)朋友正捧著一本JavaScript的書在看,忘記叫什么名字了,只記得比《thinking in java》還要厚,當(dāng)時(shí)就放棄了偷窺的念頭。

    昨天在看關(guān)于AJAX的一本書時(shí),正好很大的一部分篇幅是講JavaScript的。讀了讀,感覺JavaScript真的好強(qiáng)大。同樣是一種面向?qū)ο蟮恼Z言,學(xué)習(xí)起來有很多和JAVA很相似的地方。

    JavaScript中的"類"

    在面向?qū)ο蟮乃枷胫校詈诵牡母拍钪痪褪穷悺?一個(gè)類表示了具有相似性質(zhì)的一類事物的抽象,通過實(shí)例化一個(gè)類,可以獲得屬于該類的一個(gè)實(shí)例,即對(duì)象。

    在JavaScript中,最常見的代碼如下:

    function funcName(){
      
    // 具體內(nèi)容
    }


    我們叫funcName為一個(gè)函數(shù),其實(shí)funcName也可以理解成一個(gè)類,甚至也可以理解成一個(gè)對(duì)象。

    認(rèn)識(shí)function

    我們都知道可以用function關(guān)鍵字定義一個(gè)函數(shù),并為每一個(gè)函數(shù)指定一個(gè)函數(shù)名,通過函數(shù)名來進(jìn)行調(diào)用。在JavaScript解釋執(zhí)行時(shí),函數(shù)都是被維護(hù)為一個(gè)對(duì)象,這就是函數(shù)對(duì)象。

    函數(shù)對(duì)象和其它用戶自定義的對(duì)象有著本質(zhì)的區(qū)別,它和日期對(duì)象(Date),數(shù)組對(duì)象(Array)等一樣,都屬于內(nèi)部對(duì)象。這些對(duì)象的構(gòu)造器是有JavaScript本身定義的:通過執(zhí)行new Date()這樣的語句返回一個(gè)對(duì)象。

    函數(shù)對(duì)象對(duì)應(yīng)的類型是function,同日期對(duì)象對(duì)應(yīng)的類型是Date一樣,可以通過new function()來創(chuàng)建一個(gè)函數(shù)對(duì)象,也可以通過function關(guān)鍵字來創(chuàng)建一個(gè)對(duì)象。如:

    function func()
    // 1.有名函數(shù),函數(shù)名為func。
    //
     2.函數(shù)名被調(diào)用才執(zhí)行。
    }

    var func = new function()
    // 1.無名函數(shù),func只是一個(gè)變量對(duì)象指向了這個(gè)函數(shù)。
    //
     2.先初始化函數(shù),也就是執(zhí)行一次,再把創(chuàng)建的函數(shù)對(duì)象賦給func。
    }


    prototype原型對(duì)象

    prototype是一個(gè)對(duì)象。

    prototype對(duì)象是實(shí)現(xiàn)面向?qū)ο蟮囊粋€(gè)重要機(jī)制,所以特別記錄一下。

    由上面可以看出,每個(gè)函數(shù)其實(shí)也是一個(gè)對(duì)象,它們對(duì)應(yīng)的類是“function”。這里,JavaScript同Java不同,就是,每一個(gè)函數(shù)對(duì)象都有一個(gè)子對(duì)象prototype。prototype對(duì)象表示該函數(shù)的原型,把函數(shù)理解成類,也就是說,prototype表示了一個(gè)類的組成。

    當(dāng)通過new來獲取一個(gè)類的對(duì)象的時(shí)候,prototype對(duì)象的成員都會(huì)成為實(shí)例化對(duì)象的成員。如:

    function student(){
    }

    student.prototype.name
    ="realsmy";
    student.prototype.showBlog
    =function(){
        alert(http:
    //www.tkk7.com/realsmy);
    }


    類的實(shí)現(xiàn)

    // 定義一個(gè)類student
    function student(){
      
    // 相當(dāng)于構(gòu)造函數(shù)
    }

    // 無類型對(duì)象的構(gòu)造方法來指定prototype對(duì)象。
    student.prototype = {
      
    // 屬性
      name:"realsmy";
      
    // 方法
      showBlog:function(){
        alert(
    this.name+" :http://www.tkk7.com/realsmy");
        
    // 注意,類的成員之間互相引用,必須通過this指針來進(jìn)行。
      }

    }

    這樣更像傳統(tǒng)意義面向?qū)ο笳Z言中類的實(shí)現(xiàn),只是構(gòu)造函數(shù)和類的定義被分成了兩個(gè)部分。

    實(shí)現(xiàn)private,static

    private:
    前面的例子都屬于共有成員,也就是說,向任何實(shí)例公開這些屬性和方法。
    JavaScript中沒有特殊的機(jī)制來定義私有成員,但可以通過變量的作用域來實(shí)現(xiàn)。

    function student(){
      
    var id = "007";
      
    this.myId = id;
      
    this.showId() = function(){
        alert(id); 
    // 可以訪問id
        alert(this.myId); 
      }

    }

    var stu = new student();
    // stu.id這個(gè)會(huì)被認(rèn)作是未定義的
    stu.myId = "008"// 有效賦值
    stu.showId(); // 彈出"007"和"008"


    static:

    靜態(tài)成員也是一個(gè)類的成員。
    因?yàn)楹瘮?shù)也是一個(gè)對(duì)象,所以可以用給函數(shù)對(duì)象直接添加成員的方法來實(shí)現(xiàn)靜態(tài)成員。

    function student(){
    }

    // 靜態(tài)屬性
    student.school = "po da xue";
    // 靜態(tài)方法
    student.out = function(){
      alert(
    "jin tian ni tao ke le ma?");
    }

    這樣每一個(gè)student對(duì)象都可以調(diào)用到那個(gè)屬性和方法。
    或者
    function.prototype.show = function(){
      
    // 
    }


    這樣是給每個(gè)函數(shù)對(duì)象都添加通用的靜態(tài)方法。

    類的繼承

    利用反射機(jī)制和prototype實(shí)現(xiàn)繼承
    為了方便,可以先為每一個(gè)類添加一個(gè)共有的方法,用以實(shí)現(xiàn)繼承。

    function.prototype.inherit = function(baseClass){
      
    // 反射機(jī)制
      for(var p in baseClass.prototype){
        
    this.prototype[p] = baseClass.prototype[p];
      }

    }

    基類

    function class1(){
      
    // 
    }

    class1.prototype 
    = {
      
    // 
      method:function(){}
    }

    子類

    function class2(){
      
    // 
    }

    class2.inherit();
    class2.prototype.method 
    = function(){
      
    // 覆蓋父類中的method方法。
    }


    這樣的方法是在犧牲了一定的代碼可讀性為代價(jià)的前提下,實(shí)現(xiàn)了類的繼承。據(jù)說現(xiàn)在javascript的一種框架已經(jīng)更好的實(shí)現(xiàn)了類的繼承機(jī)制,還沒有研究過。呵呵。

    function是所有函數(shù)對(duì)象的基礎(chǔ),Object是所有對(duì)象(包括函數(shù)對(duì)象)的基礎(chǔ)。

    感覺,所有面向?qū)ο笳Z言的設(shè)計(jì)思想都是一致的。簡(jiǎn)單說就是以對(duì)象為基礎(chǔ)。JavaScript作為一種面向?qū)ο蟮恼Z言,同樣是以對(duì)象為基礎(chǔ)的。

    理解JavaScript面向?qū)ο蟮乃枷耄瑢?duì)我以后學(xué)習(xí)JavaScript的一些高級(jí)技術(shù)會(huì)有很大幫助。

    故,記錄筆記于此。



    歡迎來訪!^.^!
    本BLOG僅用于個(gè)人學(xué)習(xí)交流!
    目的在于記錄個(gè)人成長(zhǎng).
    所有文字均屬于個(gè)人理解.
    如有錯(cuò)誤,望多多指教!不勝感激!

    Feedback

    # re: 從Java的面向?qū)ο笾笤賹W(xué)JavaScript的面向?qū)ο?nbsp; 回復(fù)  更多評(píng)論   

    2007-09-21 17:16 by 千里冰封
    面向?qū)ο蟮乃枷刖褪呛?/div>

    # re: 從Java的面向?qū)ο笾笤賹W(xué)JavaScript的面向?qū)ο?nbsp; 回復(fù)  更多評(píng)論   

    2007-09-21 17:22 by 久城
    :)恩。特別是學(xué)過一種語言之后,再學(xué)另一種時(shí),理解上會(huì)快很多。

    只學(xué)JAVA時(shí)還對(duì)面向?qū)ο鬀]什么感覺,再學(xué)另一種面向?qū)ο蟮恼Z言時(shí),才開始有那么一點(diǎn)點(diǎn)感覺,發(fā)現(xiàn)很多共同的思想,我想那就是都是基于面向?qū)ο笫谷坏陌伞?/div>

    # re: 從Java的面向?qū)ο笾笤賹W(xué)JavaScript的面向?qū)ο?nbsp; 回復(fù)  更多評(píng)論   

    2007-09-22 17:31 by 我為J狂
    好東西,收藏了。

    # re: 從Java的面向?qū)ο笾笤賹W(xué)JavaScript的面向?qū)ο?nbsp; 回復(fù)  更多評(píng)論   

    2007-11-22 18:34 by 彭俊
    呵呵 不錯(cuò)

    不過在 function.prototype.show()的定義不能算是student的靜態(tài)方法。

    # re: 從Java的面向?qū)ο笾笤賹W(xué)JavaScript的面向?qū)ο?a name="Post">  回復(fù)  更多評(píng)論   

    2007-11-22 20:47 by 久城
    @彭俊

    好久不見。

    function.prototype.show()為什么不算是靜態(tài)方法呢?

    Copyright © 久城

    主站蜘蛛池模板: 亚洲一区二区三区首页| 亚洲日韩国产AV无码无码精品| 久久ww精品w免费人成| 亚洲国产韩国一区二区| 日韩一级视频免费观看| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 一区二区三区在线免费| 久久久久亚洲AV成人无码| 4444www免费看| 美女免费视频一区二区| 亚洲国产精品福利片在线观看| 国产成人精品免费午夜app| 免费毛片毛片网址| 亚洲黄色免费电影| 亚洲中文精品久久久久久不卡| 亚洲国产成人爱av在线播放| 99视频免费观看| 免费人妻精品一区二区三区| 91久久亚洲国产成人精品性色| 国产美女a做受大片免费| 久久综合国产乱子伦精品免费| 亚洲Av无码国产一区二区| 亚洲成AV人片一区二区| 国产免费一区二区三区VR| 69视频免费观看l| 在线播放国产不卡免费视频| 2020年亚洲天天爽天天噜| 亚洲国产AV无码专区亚洲AV| 在线日韩av永久免费观看| 亚洲免费闲人蜜桃| a级毛片免费观看视频| 国产亚洲精品美女久久久久久下载| 亚洲黄色免费在线观看| 亚洲国产一区二区视频网站| 亚洲中文无码永久免费 | 在线成人a毛片免费播放| 国产白丝无码免费视频| 香蕉国产在线观看免费| 亚洲精品无码少妇30P| 亚洲狠狠ady亚洲精品大秀| 亚洲人成色777777在线观看|