《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記二:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法分析
本文實(shí)例講述了Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)繼承用法。分享給大家供大家參考,具體如下:
1.關(guān)于繼承:
百度百科對(duì)繼承的解釋是:繼承是指一個(gè)對(duì)象直接使用另一對(duì)象的屬性和方法。
(話說百科對(duì)于計(jì)算機(jī)概念的繼承的解釋也太簡(jiǎn)略了)
繼承的好處,優(yōu)點(diǎn)學(xué)過面向?qū)ο蟮耐瑢W(xué)都知道,就不贅述了。
javascript中的繼承有三種(不同的書上對(duì)這三中的名稱翻譯都不一樣,我按照我的理解來命名吧):
- a.構(gòu)造函數(shù)繼承(類式繼承,組合繼承,偽經(jīng)典繼承)
- b.原型繼承
- c.原型賦值(遍歷)繼承(寄生式繼承)
2.構(gòu)造函數(shù)繼承
所謂的構(gòu)造函數(shù)繼承,就是通過創(chuàng)建一個(gè)新對(duì)象,調(diào)用父類構(gòu)造函數(shù)實(shí)現(xiàn)的一種繼承;
(知識(shí)點(diǎn):函數(shù)對(duì)象的原型會(huì)有一個(gè)屬性叫constructor, constructor實(shí)際指向的是這個(gè)函數(shù))
function person(name){
this.name = name;
}
extend(author, person);
function extend(subclass, superclass){
var f= function(){};
f.prototype = superclass.prototype;//f.prototype.constructor = superclass
subclass.prototype = new f();//這里調(diào)用的實(shí)際上是superclass(),這樣subclass.prototype.construcor = superclass
subclass.prototype.constructor = subclass;//將subclass的構(gòu)造函數(shù)改寫為正常的自身的構(gòu)造函數(shù)
}
3.原型式繼承
我們知道javascript在引用一個(gè)對(duì)象的屬性時(shí),首先會(huì)去讀這個(gè)對(duì)象是否有這個(gè)屬性,如果沒有會(huì)繼續(xù)看這個(gè)對(duì)象的原型是否有這個(gè)屬性;
var person ={}
var author = clone(person);
function clone(obj){
function F(){};
F.prototype = obj;
return new F;
}
clone函數(shù)的作用就是把父類的所有成員都給了新對(duì)象的prototype,成為了新對(duì)象prototype的成員,因此子類在引用一個(gè)父類屬性時(shí),都能在prototype中找到,但是這種方式繼承是的所有克隆出來的對(duì)象都共享每個(gè)屬性和方法的唯一實(shí)例(因?yàn)槎际峭ㄟ^原型讀?。挥性谥苯釉O(shè)置了某個(gè)克隆出來的對(duì)象的屬性和方法(變?yōu)閷?duì)象獨(dú)立屬性),情況才會(huì)有變化。
4.原型賦值(遍歷)繼承
這種賦值比原型賦值好的一點(diǎn)在于它控制繼承的范圍
var person = {};
augment(author, person);
//參數(shù)最少兩個(gè),超過兩個(gè)則表示指定要繼承的成員
function augment(receivingclass, givingclass){
if(arguments[2]){
for(var i=2;i<arguments.length;i++){
receivingclass.prototype[arguments[i]] = givingclass.prototype[arguments[i]];
}
}
else{
for(methodname in givingclass.prototype){
receivingclass.prototype[methodname] = givingclass.prototype[methodname];
}
}
}
這種方式比較適用于var obj這樣定義的對(duì)象,而不是用函數(shù)來定義的對(duì)象,如果使用函數(shù)定義的對(duì)象,同時(shí)又要指定繼承的成員,別忘了constructor
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- javascript設(shè)計(jì)模式 – 簡(jiǎn)單工廠模式原理與應(yīng)用實(shí)例分析
- 《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記五:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)工廠模式實(shí)例分析
- JavaScript設(shè)計(jì)模式之工廠模式和抽象工廠模式定義與用法分析
- JavaScript設(shè)計(jì)模式之工廠模式和構(gòu)造器模式
- 《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記七:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)組合模式詳解
- 《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記四:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)鏈?zhǔn)秸{(diào)用實(shí)例分析
- 《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記三:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)單例模式原理與實(shí)現(xiàn)方法分析
- 《javascript設(shè)計(jì)模式》學(xué)習(xí)筆記一:Javascript面向?qū)ο蟪绦蛟O(shè)計(jì)對(duì)象成員的定義分析
- javascript設(shè)計(jì)模式 – 工廠模式原理與應(yīng)用實(shí)例分析
相關(guān)文章
關(guān)于ES6中的箭頭函數(shù)超詳細(xì)梳理
箭頭函數(shù)可以說是es6的一大亮點(diǎn),使用箭頭函數(shù),可以簡(jiǎn)化編碼過程,是代碼更加的簡(jiǎn)潔,下面這篇文章主要給大家介紹了關(guān)于ES6中箭頭函數(shù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
Js判斷兩個(gè)數(shù)組是否相等的幾種常見場(chǎng)景
無論是在開發(fā)中還是面試時(shí),在js中判斷變量是否相等,都是一個(gè)比較常見的問題,這篇文章主要給大家介紹了關(guān)于Js判斷兩個(gè)數(shù)組是否相等的幾種常見場(chǎng)景,需要的朋友可以參考下2024-07-07
JS聲明式函數(shù)與賦值式函數(shù)實(shí)例分析
這篇文章主要介紹了JS聲明式函數(shù)與賦值式函數(shù),結(jié)合實(shí)例形式分析了JS函數(shù)解析的流程與執(zhí)行順序,需要的朋友可以參考下2016-12-12
淺談SpringMVC中post checkbox 多選框value的值(隱藏域方式)
下面小編就為大家分享一篇淺談SpringMVC中post checkbox 多選框value的值(隱藏域方式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
JS使用單鏈表統(tǒng)計(jì)英語單詞出現(xiàn)次數(shù)
這篇文章主要為大家詳細(xì)介紹了JS使用單鏈表統(tǒng)計(jì)英語單詞出現(xiàn)次數(shù)的相關(guān)資料,列出所有單詞及其出現(xiàn)次數(shù),感興趣的小伙伴們可以參考一下2016-06-06
比較簡(jiǎn)單實(shí)用的使用正則三種版本的js去空格處理方法
比較簡(jiǎn)單實(shí)用的使用正則三種版本的js去空格處理方法...2007-11-11
JavaScript根據(jù)數(shù)據(jù)生成百分比圖和柱狀圖的實(shí)例代碼
這篇文章介紹了JavaScript根據(jù)數(shù)據(jù)生成百分比圖和柱狀圖的實(shí)例代碼,有需要的朋友可以參考一下2013-07-07
JS Html轉(zhuǎn)義和反轉(zhuǎn)義(html編碼和解碼)的實(shí)現(xiàn)與使用方法總結(jié)
這篇文章主要介紹了JS Html轉(zhuǎn)義和反轉(zhuǎn)義(html編碼和解碼)的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式總結(jié)分析了JS Html轉(zhuǎn)義和反轉(zhuǎn)義、html編碼和解碼相關(guān)封裝類定義與具體使用技巧,需要的朋友可以參考下2020-03-03
js編寫當(dāng)天簡(jiǎn)單日歷效果【實(shí)現(xiàn)代碼】
下面小編就為大家?guī)硪黄猨s編寫當(dāng)天簡(jiǎn)單日歷效果【實(shí)現(xiàn)代碼】。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考2016-05-05

