JS物件導向基礎篇(封裝 繼承 多態)

來源:互聯網
上載者:User

標籤:物件導向編程   array   war   特性   系統   ret   his   logs   turn   

首先我們要建立一個對象,我們可以利用javascript的文法特徵,以類的思想來建立對象

一:封裝

(1)原始方法,代碼如下

<script>   var obj=new Object();   obj.name=‘Tom‘; //給對象添加屬性   obj.sex=22;   obj.showName=function(){    //給對象添加方法    alert(this.name);}    obj.showAge=function(){    alert(this.age);}    obj.showName();   //‘Tom‘   obj.showAge();   //22//上面的方式通過new關鍵字產生一個對象,然後根據javascript是動態語言的特性來添加屬性和方法,構造一個對象。其中this表示調用該方法的對象。這種方式的問題是如果需要多次建立對象,那麼需要重複代碼多次,不利於代碼的複用。</script>

 

(2)工廠加工, 代碼如下

<script>   function createObj(name,age){      var Obj=new Object();      obj.name=name;      obj.age=age;      obj.showName=function(){         alert(this.name);  }      obj.showAge=function(){         alert(this.age);    }      return obj;}   var obj1=createObj(‘sun‘,22);   var obj2=createObj(‘leo‘,21);   obj1.showName();  //sun   obj1.showAge();    //22   obj2.showName();  //leo   obj2.showAge();    //21   //上面通過定義幾個函數的對象,解決了不同對象持有函數對象的私人屬性問題。現在所有對象的方法都持有上面兩個函數的引用,但這麼一來,對象的函數又和   對象相互獨立了,這和物件導向中持有方法屬於與特定類的思想不符。</script>

 

(3)建構函式方式, 代碼如下

 <script>      function person(name,age){      //var this=new Object();  //系統類比建立對象      this.name=name;      this.age=age;      this.showName=function(){         alert(this.name);     }      this.showAge=function(){         alert(this.age);     }    //return this    //系統類比返回了對象    }   var obj1=new person(‘sun‘,22);   var obj2=new person(‘leo‘,21);   obj1.showName();  //sun   obj1.showAge();    //22   obj2.showName();  //leo   obj2.showAge();    //21   //建構函式的方式與工廠加工方式一樣,會為每個對象建立獨享的函數對象,當然也可以將這些函數對象定義在建構函式外面,這樣又有了對象和方法     相互獨立的問題   </script>

 

(4)原型方法, 代碼如下

 <script>        function person(){}  //定義一個空建構函式,且不能傳遞參數       person.prototype.age=22;       person.prototype.array=[‘sun‘,‘leo‘];       person.prototype.showAge=function(){           alert(this.age);}       person.prototype.showArray=function(){           alert(this.array);}       var obj1=new person();  //產生一個person對象       var obj2=new person();       obj1.array.push(‘blue‘);  //向obj1的array屬性添加一個屬性       obj1.showArray(); //‘sun‘,‘leo‘,‘blue‘       obj2.showArray(); //‘sun‘,‘leo‘,‘blue‘    //上面的代碼通過obj1向obj1的屬性array添加元素時,obj2的array屬性的元素也跟著受影響,原因是在於obj1和obj2對象的array屬性引用的是同一個Array     對象,那麼改變這個Array對象,另一個引用Array對象的屬性自然也會受到影響  </script>

 

(5)混合的建構函式/原型方式, 代碼如下

  <script>       function person(name,age){        this.name=name;        this.age=age;}             person.prototype.showName=function(){        alert(this.name);}       person.prototype.showAge=function(){        alert(this.age);}       var obj1= new person(‘sun‘,22);       var obj2= new person(‘leo‘,21);       obj1.showName();  //sun       obj1.showAge();    //22       obj2.showName();  //leo       obj2.showAge();    //21    //屬性私人後,改變各自的屬性不會影響別的對象。同時,方法也是由各個對象共用的。在語義上,這符合了物件導向編程的要求。    </script>

 

二:繼承(主要包括屬性的繼承和方法的繼承)
代碼如下   <script>              function person(name, sex){        this.name=name;        this.sex=sex;}     person.prototype.showName=function(){           alert(this.name);}     person.prototype.showSex=function(){          alert(this.sex);}   ////////////////////////////////////////////////////     function worker(name,sex,job){        person.call(this,name,sex);//建構函式偽裝   調用父級的建構函式--為了繼承屬性        this.job=job;}     //原型鏈  通過原型來繼承父級的方法     for(attr in person.prototype){       worker.prototype[attr]=person.prototype[attr];}     worker.prototype.showJob=function(){         alert(this.job); }      var op=new person(‘blue‘,‘男‘);        var ow=new worker(‘blue‘,‘男‘,‘程式員‘);      op.showName();  //blue      op.showSex();  //男      ow.showName();  //blue      ow.showsex();  //男      ow.showjob();  //程式員    //繼承的好處:父類新加的功能,子類也具備該功能,子類新加的功能不會影響父類的功能   </script>

 

原文地址:http://www.jianshu.com/p/a66f1ce2145a

JS物件導向基礎篇(封裝 繼承 多態)

聯繫我們

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