js繼承,js方法繼承

來源:互聯網
上載者:User

js繼承,js方法繼承

js的繼承是實現繼承,是通過原型鏈實現的。首先我們知道每個函數的執行個體都有一個指向該函數原型的指標,當我們讓子類的原型等於父類的執行個體時會發生什麼 呢?

Studeng.prototype = new Person();我們都知道原型是可以共用的,繼承就是為了讓子類所有對象實現父類的屬性和方法,所以等號左邊是子類的原型,當等於父類的執行個體時,就可以找到通往父類原型的路,這時新原型擁有父類執行個體所有的屬性和方法,這就是原型鏈,子類執行個體→子類原型→父類原型,當然我們為了避免原型的缺點共用性,可以再子類建構函式中調用父類方法Person.call(this),這時就會為每個子類對象分配相應的屬性(這個前提父類的建構函式定義屬性哦才能避免參考型別共用問題)


JS 類繼承與原型繼承不同

類式繼承就像java的繼承一樣,思想也比較簡單:在子類型建構函式的內部調用超類型建構函式。

原型式繼承是藉助已有的對象建立新的對象,將子類的原型指向父類,就相當於加入了父類這條原型鏈

而你的 下面這段代碼不是嚴格意義上的類式繼承,按照Nicholas C.Zakas的說法,這個應該叫做組合式繼承。它調用了兩次parent2()。第一次是 child2.prototype=new parent2('param'); child2就會得到兩個屬性param,getParam(),他們都是parent2的屬性,但是他們在child2的原型中。第二次是parent2.call(this,cparam); 這次又在新對象上建立了執行個體屬性param,getParam()。於是,這兩個屬性就屏蔽了原型中的兩個同名屬性。這有什麼好處呢,就是你在構建一個child3時也繼承parent2()的屬性,還可以定義自己的屬性。與此同時他長的就和他兄弟不同了,但又有一樣的“血統(使用父類的方法)”。

純手打,歡迎繼續討論
 
js,繼承問題?

function Animal() {
this.species = "animal";
}
function Cat(name, color) {
this.name = name;
this.color = color;
}

var F = function() {};
F.prototype = new Animal();
Cat.prototype = new F();
Cat.prototype.constructor = Cat;

var a = new Cat("名字", "顏色");
document.write(a.species);
 

聯繫我們

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