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

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

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

    一直都在用JavaScript完成一些客戶端的功能,每次應用都是到網上現查現用,卻從來沒有系統的學習一下JavaScript。

    有一次企圖偷窺一下它的內涵,發現身邊一個朋友正捧著一本JavaScript的書在看,忘記叫什么名字了,只記得比《thinking in java》還要厚,當時就放棄了偷窺的念頭。

    昨天在看關于AJAX的一本書時,正好很大的一部分篇幅是講JavaScript的。讀了讀,感覺JavaScript真的好強大。同樣是一種面向對象的語言,學習起來有很多和JAVA很相似的地方。

    JavaScript中的"類"

    在面向對象的思想中,最核心的概念之一就是類。 一個類表示了具有相似性質的一類事物的抽象,通過實例化一個類,可以獲得屬于該類的一個實例,即對象。

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

    function funcName(){
      
    // 具體內容
    }


    我們叫funcName為一個函數,其實funcName也可以理解成一個類,甚至也可以理解成一個對象。

    認識function

    我們都知道可以用function關鍵字定義一個函數,并為每一個函數指定一個函數名,通過函數名來進行調用。在JavaScript解釋執行時,函數都是被維護為一個對象,這就是函數對象。

    函數對象和其它用戶自定義的對象有著本質的區別,它和日期對象(Date),數組對象(Array)等一樣,都屬于內部對象。這些對象的構造器是有JavaScript本身定義的:通過執行new Date()這樣的語句返回一個對象。

    函數對象對應的類型是function,同日期對象對應的類型是Date一樣,可以通過new function()來創建一個函數對象,也可以通過function關鍵字來創建一個對象。如:

    function func()
    // 1.有名函數,函數名為func。
    //
     2.函數名被調用才執行。
    }

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


    prototype原型對象

    prototype是一個對象。

    prototype對象是實現面向對象的一個重要機制,所以特別記錄一下。

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

    當通過new來獲取一個類的對象的時候,prototype對象的成員都會成為實例化對象的成員。如:

    function student(){
    }

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


    類的實現

    // 定義一個類student
    function student(){
      
    // 相當于構造函數
    }

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

    }

    這樣更像傳統意義面向對象語言中類的實現,只是構造函數和類的定義被分成了兩個部分。

    實現private,static

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

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

    }

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


    static:

    靜態成員也是一個類的成員。
    因為函數也是一個對象,所以可以用給函數對象直接添加成員的方法來實現靜態成員。

    function student(){
    }

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

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


    這樣是給每個函數對象都添加通用的靜態方法。

    類的繼承

    利用反射機制和prototype實現繼承
    為了方便,可以先為每一個類添加一個共有的方法,用以實現繼承。

    function.prototype.inherit = function(baseClass){
      
    // 反射機制
      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方法。
    }


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

    function是所有函數對象的基礎,Object是所有對象(包括函數對象)的基礎。

    感覺,所有面向對象語言的設計思想都是一致的。簡單說就是以對象為基礎。JavaScript作為一種面向對象的語言,同樣是以對象為基礎的。

    理解JavaScript面向對象的思想,對我以后學習JavaScript的一些高級技術會有很大幫助。

    故,記錄筆記于此。



    歡迎來訪!^.^!
    本BLOG僅用于個人學習交流!
    目的在于記錄個人成長.
    所有文字均屬于個人理解.
    如有錯誤,望多多指教!不勝感激!

    Feedback

    # re: 從Java的面向對象之后再學JavaScript的面向對象  回復  更多評論   

    2007-09-21 17:16 by 千里冰封
    面向對象的思想就是好

    # re: 從Java的面向對象之后再學JavaScript的面向對象  回復  更多評論   

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

    只學JAVA時還對面向對象沒什么感覺,再學另一種面向對象的語言時,才開始有那么一點點感覺,發現很多共同的思想,我想那就是都是基于面向對象使然的吧。

    # re: 從Java的面向對象之后再學JavaScript的面向對象  回復  更多評論   

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

    # re: 從Java的面向對象之后再學JavaScript的面向對象  回復  更多評論   

    2007-11-22 18:34 by 彭俊
    呵呵 不錯

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

    # re: 從Java的面向對象之后再學JavaScript的面向對象  回復  更多評論   

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

    好久不見。

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

    Copyright © 久城

    主站蜘蛛池模板: 亚洲国产专区一区| 久久久久亚洲Av片无码v| av午夜福利一片免费看久久| 国产成人A人亚洲精品无码| 蜜桃AV无码免费看永久| 亚洲av日韩专区在线观看| 亚洲精品蜜桃久久久久久| 免费大片黄在线观看yw| 美女18毛片免费视频| 亚洲国产人成网站在线电影动漫| 成人毛片18岁女人毛片免费看| 一级做a爰全过程免费视频毛片| 亚洲午夜精品在线| 亚洲一级黄色视频| 免费在线观看的网站| 黄 色一级 成 人网站免费| 丁香婷婷亚洲六月综合色| 亚洲人成精品久久久久| 四虎www免费人成| 日韩免费无码视频一区二区三区| 亚洲av午夜电影在线观看| 99久久精品国产亚洲| 亚洲国产人成中文幕一级二级| 美女视频黄a视频全免费| 中国国语毛片免费观看视频| 亚洲色少妇熟女11p| 久久综合亚洲色HEZYO社区| 亚洲中文字幕在线第六区| 在线精品免费视频| 91青青青国产在观免费影视| 国产免费伦精品一区二区三区| 亚洲欧洲专线一区| 亚洲综合色丁香麻豆| 亚洲欧洲成人精品香蕉网| 四虎成人精品在永久免费 | 最近免费中文字幕4| 最近2019免费中文字幕6| 两个人日本WWW免费版| 无人视频在线观看免费播放影院| 亚洲天堂2016| 亚洲成a人不卡在线观看|