javascript學習筆記[6]–物件導向

來源:互聯網
上載者:User

         今天又是宅在家中一天,看了物件導向編程,包含以下幾個章節,建立類和使用類,類成員存取控制,繼承和組合,靜態成員和靜態類,多態,原型鏈本質論。因為已經有了學習其他物件導向語言的經曆,所以這邊看的速度快了點,預計明天開始進入javascript內建類。

         有一件略微憂傷的事,昨天寫的學習筆記【5】--函數2被部落格園移出首頁了,估計是那管理員看我一天發了三篇隨筆,而且深度不夠吧,所以看不下去了,卻弄得我好憂傷,好憂傷,好了,這一節就盡量寫的長一點,然後多一些自己的理解吧,簡單的知識就不說了,哎,這種學習性的東西其實就是這樣。。

         6.1物件導向--基礎概念

              這裡我不仔細說了,就羅列一些基礎知識點:

               對象,執行個體,類(對象時類的執行個體)

               優點:可重用,易維護

               基本特徵:封裝,繼承,多態(類一個方法多種形態),(抽象)

         6.2 建立類--構造器方法

               使用函數建立類,函數本身也被稱為該類的構造器(也稱為構造器方法,構造方法)。

               javascript是基於原型的物件導向----important.

View Code

function Person(){  this.name;  this.age;  this.showInfo = function(){        return "我的名字是"+this.name+"我現在"+this.age+"歲。";  }}var  tom = new Person();tom.name = "Tom";tom.age = 22;var info = tom.showInfo();document.write(info+"<br />");

             執行個體化就用new,Object,Array不需要使用new關鍵字就可以執行個體化。

        6.3 定義方法和屬性

            1)this關鍵字---看上面的代碼就是通過this定義屬性(其實用this關鍵字的時候很容易犯錯誤,尤其是又有閉包函數,這邊如果記得的話在總結一篇)

            2)prototype定義

View Code

//prototype定義方法,屬性也類似function Person(myName,myAge){   this.name = myName;   this.age = myAge;}Person.protoype.showInfo = function(){   return "name = "+name+",age = "+age;}; //prototype另一個重要作用就是為類添加新成員 function showDetail(){       return "我是一隻菜鳥"; } Person.prototype.showDetail = showDetail; var person = new Person("tony",22); document.write(person.showDetail());

 

            3)Object類,return擴充

                Object類直接定義一個執行個體,並為該對象賦屬性和方法,很好的體現了javascript名值對的概念。見如下代碼

View Code

var person = {name: "tony",age: 22,showInfo: function(){      return "name="+name+",age="+age;  }}document.write(person.showInfo());

 

              下面是用return語句定義方法和屬性,還有使用prototype和Object配合定義方法和屬性

View Code

function Person(myName,myAge){ return{        name:  myName,        age: myAge,        showInfo: function(){        return "name = "+name+",age = "+age;      }   }}//prototype和Object配合為類定義方法和屬性function Person(){}Person.prototype = {                name:  "tony",        age: 22,        showInfo: function(){           return "name = "+name+",age = "+age;        }};

 

        6.4 使用get和set存取器---java中的get,set方法相同

        6.5類和成員存取控制---public和private變數

        6.6 繼承和組合

              繼承:記住Child.prototype = new Father(),這就實現了繼承,那些關於使用基類的構造器方法,實現其他語言中super方法就可以了。

             組合:記住把手,腿,頭等其他組件組成人,這就是組合的思想,具體代碼就不貼了,就是在組合的類中(人)實現方法中建立一個手,然後使用手的方法。

             這裡有個概念,is-a和has-a。is-a是屬於概念,has-a是包含概念。

        6.7 靜態成員,靜態類和枚舉

              靜態類:就是對比於現實中那些獨一無二的東西。世界上就有一個月亮,所以它可以定義為一個靜態類。如果想把成員聲明為靜態,只需將屬性或者方法賦給類本身。就這樣。還有一些注意事項就不說了。

        6.8 多態--重載和覆蓋

              一個類中有多個方法名相同的方法---重載,但是在javascript中不支援直接定義多個方法來實現重載,下面的代碼利用arguments.length判斷參數個數,typeof判斷參數類型來實現重載

View Code

function overLoadTest(){    var len = arguments.length;    if(len == 2){        if(typeof(arguments[0]) =="number" && typeof(arguments[1]) == "number"){            //執行函數        }else if(typeof(arguments[0]) =="string" && typeof(arguments[1]) == "string"){                    }else{            throw new Error("兩個參數類型不對");        }    }    if(len == 3){        if(){        }else if(){                    }else{                    }    }}

 

             在新類中覆蓋基類的方法---覆蓋,只需要為子類新定義一個同名的方法成員即可實現覆蓋。就不寫代碼了。

        6.9 原型鏈本質論-----重點

              這裡我也有很多東西不知道,所以多寫一些,大家一起學習吧。知識點如下:

              每個類都有一個prototype屬性(靜態屬性),該屬性值標示該類的一個對象,即原型對象。

             原型對象上定義的屬性中就有關於基類的資訊,然後基類上的prototype也有它的基類資訊,這樣就建立了一個鏈條----原型鏈(prototype chain)--繼承關係引起的

             原型鏈的盡頭是Object的原型對象,該對象的內部prototype的值為null。

             ECMA-262規定:類定義的時候,它有原型對象,包好一些內部特定的屬性,作為類的特性,其中兩個內部屬性就是【prototype】(該類的父類的原型對象)和【class】(類名)。在非ie瀏覽器中可以用_proto_訪問,例如:

            Array.prototype._proto_ == Object.prototype.

           原型鏈的組成部分:實現繼承和分享屬性(看一下上面的代碼就知道了)

            下面是幾個方法:

            Object.getPrototypeOf()方法等到指定對象的prototype屬性,替代_proto_屬性

            Class.prototype.isPrototype(object),查看對象是否在指定對象的原型鏈中。

            oObject.hasOwnProperty(propName),查看指定對象是否定義了特定屬性

            Object.propertyIsEnumerabel(),查看指定的屬性是否存在以及是否可枚舉。

            就這些吧,挺晚了。明天繼續。

 以上全部都屬個人原創,請大家轉載的時候附上原創連結: http://www.cnblogs.com/tonylp

相關文章

聯繫我們

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