javascript oop編程 — 實現繼承的三種形式

來源:互聯網
上載者:User

標籤:js 繼承

javascript  oop編程  — 實現繼承的三種形式[1]


(1)類比類的方式, 我們都知道js是原型繼承機制,不存在class和instance分離的這種方式

假設,我們有兩個類


function  Animal(){

this.name = “animal”;

this.eat = function(){

consle.log(“eating");

 }

 }


function Cat(){

this.say = function(){

console.log(“miao miao!!");

 }

 }


如果我們想要Cat 擁有Animal 的name屬性和eat方法,只需要

Cat.prototype = new Animal();

但是這不是一個好的實踐,想想看,如果還有一個Duck類,難道還要new一個Animal來繼承嗎,如此繼續嗎?

正確的作法是將通用的內容放到prototype裡面,所有的子嗣,只需要將自己的prototype指向一個通用的prototype來實現繼承。


如下,

Animal.prototype = {

name:”animal”,

eat:function(){

console.log(“eating");

 }

 }


Cat.prototype = Animal.prototype;


ES5 為我們提供了一個通用的繼承函數,通過一個指定的原型建立一個對象

Object.create   很遺憾並不是所有瀏覽器都支援,手工改一下


var inherit = Object.create || function(proto){

        function F(){};

F.prototype = proto;

return new F

 }


上面的例子可以寫成


Cat.prototype = inherit(Animal.prototype);

——————————

上面這樣做,會出現Cat.prototype = F 的情況,我們需要撥亂反正,不如再寫一個封裝,專門來實現繼承


var  extend = function(Child,Parent){

Child.prototype = inherit(Parent.prototype);

Child.prototype.constructor = Child;

 }





javascript oop編程 — 實現繼承的三種形式

聯繫我們

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