摘要:什么是繼承繼承是一種減少重復(fù)性代碼的一種設(shè)計(jì)模式,盡量弱化對(duì)象間耦合,開(kāi)閉原則的一種很好的實(shí)現(xiàn)。三摻元類這種繼承方式是為了擴(kuò)充類的一些重復(fù)函數(shù)而不重寫(xiě)代碼,這個(gè)也是一種多繼承的效果。所以在使用的繼承前,最好可以很好的理解下原型鏈這個(gè)概念。
什么是繼承
繼承是一種減少重復(fù)性代碼的一種設(shè)計(jì)模式,盡量弱化對(duì)象間耦合,開(kāi)閉原則的一種很好的實(shí)現(xiàn)。
javascript繼承由于javascript的語(yǔ)言特性,它的繼承也被分為了3中實(shí)現(xiàn)方式
一、類繼承function extend(subClass, superClass) { var F = function () { }; F.prototype = superClass.prototype; subClass.prototype = new F(); subClass.prototype.constructor = subClass; subClass.superclass = superClass.prototype; if (superClass.prototype.constructor == Object.prototype.constructor) { superClass.prototype.constructor = superClass; } } function Person(name) { this.name = name; } Person.prototype.getName = function () { return this.name; } function Author(name, books) { Author.superclass.constructor.call(this, name); this.books = books; } extend(Author, Person); Author.prototype.getBooks = function () { return this.books; }; Author.prototype.getName = function () { var name = Author.superclass.getName.call(this); return name + ", Author of " + this.getBooks().join(", "); }; var hugo = new Author("hugo", ["Notre-Dame de Paris"]); hugo.getName(); hugo.getBooks();
這種繼承方式比較適合不熟悉javascript語(yǔ)言原型的程序員使用。
二、原型繼承function clone(object) { function F() { } F.prototype = object; return new F; } var Person = { name: "默認(rèn)值", getName: function () { return this.name; } } var Author = clone(Person); Author.books = []; // Default value. Author.getBooks = function() { return this.books; } hugo = clone(Author); hugo.name = "hugo"; hugo.books =["Notre-Dame de Paris"]; hugo.getName(); hugo.getBooks();
這種繼承比較節(jié)約內(nèi)存。但是理解更加復(fù)雜。起屬性默認(rèn)值指向父類屬性。
三、摻元類function augment(receivingClass, givingClass) { if(arguments[2]) { // Only give certain methods. for(var i = 2, len = arguments.length; i < len; i++) { receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]]; } } else { // Give all methods. for(methodName in givingClass.prototype) { if(!receivingClass.prototype[methodName]) { receivingClass.prototype[methodName] = givingClass.prototype[methodName]; } } } } var Mixin = function() {}; Mixin.prototype = { serialize: function() { var output = []; for(key in this) { output.push(key + ": " + this[key]); } return output.join(", "); } }; function Person(name) { this.name = name; } Person.prototype.getName = function () { return this.name; } augment(Person, Mixin,"serialize"); var hugo = new Person("hugo"); hugo.serialize();
這種繼承方式是為了擴(kuò)充類的一些重復(fù)函數(shù)而不重寫(xiě)代碼,這個(gè)也是一種多繼承的效果。
總結(jié)javascript的繼承大體上使用原型的方式會(huì)比較節(jié)省內(nèi)存空間,不過(guò)也有一定的使用難度。不過(guò)在理解了原型以后就可以這是一種非常簡(jiǎn)化的繼承方式,對(duì)于擴(kuò)展也很方便。所以在使用javascript的繼承前,最好可以很好的理解下原型鏈這個(gè)概念。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/87760.html
摘要:的繼承方式屬于原型式繼承,非常靈活。當(dāng)使用關(guān)鍵字執(zhí)行類的構(gòu)造函數(shù)時(shí),系統(tǒng)首先創(chuàng)建一個(gè)新對(duì)象,這個(gè)對(duì)象會(huì)繼承自構(gòu)造函數(shù)的原型對(duì)象新對(duì)象的原型就是構(gòu)造函數(shù)的屬性。也就是說(shuō),構(gòu)造函數(shù)用來(lái)對(duì)生成的新對(duì)象進(jìn)行一些處理,使這個(gè)新對(duì)象具有某些特定的屬性。 繼承這個(gè)東西在Javascript中尤其復(fù)雜,我掌握得也不好,找工作面試的時(shí)候在這個(gè)問(wèn)題上栽過(guò)跟頭。Javascript的繼承方式屬于原型式繼承,...
摘要:還有一個(gè)問(wèn)題,就是不能在創(chuàng)建子類性時(shí),像父類型的構(gòu)造函數(shù)傳遞參數(shù)。組合繼承將原型鏈和借用構(gòu)造函數(shù)組合到一起,發(fā)揮兩者之長(zhǎng)的一張繼承模式,下面來(lái)看個(gè)例子。組合繼承最大的問(wèn)題是無(wú)論在什么情況下,都會(huì)調(diào)用兩次父類型構(gòu)造函數(shù)。 繼承 繼承是面向?qū)ο笳Z(yǔ)言中特別重要的概念,js的繼承主要是靠原型鏈實(shí)現(xiàn)的。 原型鏈!!! 看到我給標(biāo)題打了三個(gè)嘆號(hào)嗎,這里真的很重要!這里真的很重要!這里真的很重要!j...
摘要:最后抽離出來(lái)了一個(gè)類,可以幫助我們更好的做組件化。一個(gè)組件有自己的顯示形態(tài)上面的結(jié)構(gòu)和內(nèi)容行為,組件的顯示形態(tài)和行為可以由數(shù)據(jù)狀態(tài)和配置參數(shù)共同決定。接下來(lái)我們開(kāi)始正式進(jìn)入主題,開(kāi)始正式介紹。下一節(jié)鏈接直達(dá)小書(shū)基本環(huán)境安裝 React.js 小書(shū) Lesson4 - 前端組件化(三):抽象出公共組件類 本文作者:胡子大哈本文原文:http://huziketang.com/books...
摘要:簡(jiǎn)單回顧一下構(gòu)造函數(shù)原型和實(shí)例對(duì)象之間的關(guān)系每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象。找到生成構(gòu)造函數(shù)的原型對(duì)象的構(gòu)造函數(shù),搜索其原型對(duì)象,找到了。 JS面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承的實(shí)現(xiàn) - 原型鏈 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書(shū)中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯(cuò)誤,會(huì)非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaS...
摘要:年求職面經(jīng)及總結(jié)我的求職之路差不多走到盡頭了感覺(jué)真是精疲力盡了把這大半年的經(jīng)歷和面試總結(jié)寫(xiě)下來(lái)希望能給和我一樣在求職路上煎熬的人一點(diǎn)幫助先說(shuō)背景微電子科學(xué)與工程專業(yè)學(xué)過(guò)兩門和相關(guān)的課程語(yǔ)言和單片機(jī)這個(gè)專業(yè)的唯一好處就是大部分人并不知道這個(gè)專 18年求職面經(jīng)及總結(jié) 我的求職之路差不多走到盡頭了,感覺(jué)真是精疲力盡了.把這大半年的經(jīng)歷和面試總結(jié)寫(xiě)下來(lái),希望能給和我一樣在求職路上煎熬的人一點(diǎn)幫...
閱讀 2581·2021-11-22 12:01
閱讀 1105·2021-11-15 11:37
閱讀 3685·2021-09-22 14:59
閱讀 1746·2021-09-04 16:45
閱讀 1382·2021-09-03 10:30
閱讀 1013·2021-08-11 11:18
閱讀 2459·2019-08-30 10:53
閱讀 2013·2019-08-29 15:13