從javascript來看面向?qū)ο缶幊獭?/h1>

面向?qū)ο笕筇匦裕?/h1>
  • 封裝
  • 繼承
  • 多態(tài)

1.什么是封裝:

顧名思義郭厌,封:封閉竣蹦,裝:裝起來筝野,將具體的實現(xiàn)細節(jié)裝到一個容器中晌姚,并封閉起來,防止容器外部直接訪問容器內(nèi)部的實現(xiàn)細節(jié)歇竟,僅公開暴露指定的訪問路徑挥唠;生活中的例子:到飯館吃飯,你只需要跟服務(wù)員講你要吃什么飯菜焕议,服務(wù)員就會跟后臺廚房的廚師說明一下宝磨,等待一段時間后,飯菜就被服務(wù)員直接遞送到你面前盅安,作為客戶的你是不知道也無需知道飯菜的具體做法唤锉,后臺廚房的廚師及做飯菜的過程就是被封裝的細節(jié),而服務(wù)員則是公開暴露的訪問路徑别瞭,你只能通過服務(wù)員點餐然后獲得飯菜窿祥,而不能直接去到后臺廚房要求廚師如何做飯菜。

讓我會心一笑蝙寨,封裝的場景一定會在你腦海里飄過一種熟悉感晒衩,js里的閉包就是封裝的一種嗤瞎。

2.繼承

最適合用的就是 寄生組合繼承
何為組合? 其實就是 構(gòu)造函數(shù) + 原型繼承
先說原型繼承吧听系! 其實很簡單就是:

function animal(size){
    this.size = size;
}

function cat (){
 ...
}
var aniIns = new animal('5米')
cat.prototype = aniIns;
catPiPi = new cat()
catPiPi.size // '5米'   

很簡單的繼承方式贝奇, size繼承于父。 但是問題是 你創(chuàng)建的所有的貓的size的值都會一樣靠胜。為了改變這個問題引入構(gòu)造函數(shù)模式掉瞳。

function animal(size){
    this.size = size;
}

function cat (size){
  animal.call(this,arguments)
}
var aniIns = new animal('3米')
cat.prototype = aniIns;
catPiPi = new cat('1米');
catYaoRan = new cat('1.5米');
catPiPi.size // '1米' 
catYaoRan.size // '1.5米'

這就是組合方式了,然而其缺點十分明顯浪漠。 兩只貓都有自己的size 同時原型鏈上也有一個size 就是說多了陕习。我們不想要那個size 但是我們想要animal的原型 那么在組合的基礎(chǔ)上 使用寄生模式。

function animal(size){
    this.size = size;
}

function constructorPro(){
    var func = new Function();
    func.prototype = animal.prototype
    return func
}

function cat (size){
  animal.call(this,arguments)
}
var aniIns = new animal('3米')
cat.prototype = constructorPro();
catPiPi = new cat('1米');
catYaoRan = new cat('1.5米');
catPiPi.size // '1米' 
catYaoRan.size // '1.5米'

且原型鏈上沒有cat了郑藏。為了讓他的constructor正常 還要做一件事 就是 constructor賦值下:

function animal(size){
    this.size = size;
}

function constructorPro(){
    var func = new Function();
    func.prototype = animal.prototype
    func.prototype.constructor = animal  // 這里做了改變衡查,相比較與上面那個。
    return func
}

function cat (size){
  animal.call(this,arguments)
}
var aniIns = new animal('3米')
cat.prototype = constructorPro();
catPiPi = new cat('1米');
catYaoRan = new cat('1.5米');
catPiPi.size // '1米' 
catYaoRan.size // '1.5米'

3.多態(tài):

多態(tài)其實是指在 編譯的過程中無法確定變量的類型或執(zhí)行函數(shù)最終結(jié)果必盖,只有在運行的時候才能確定拌牲。(土話 下面給出好點的描述)(方法和變量都有多態(tài))

所謂多態(tài)就是指程序中定義的引用變量所指向的具體類型或通過該引用變量發(fā)出的方法調(diào)用在編程時并不確定,而是在程序運行期間才確定歌粥,即一個引用變量倒底會指向哪個類的實例對象塌忽,該引用變量發(fā)出的方法調(diào)用到底是哪個類中實現(xiàn)的方法,必須在由程序運行期間才能決定失驶。
在java中土居,最常用的多態(tài)是通過,繼承嬉探、構(gòu)造擦耀、向上轉(zhuǎn)型來實現(xiàn)的。還是拿貓的例子來說吧涩堤。

public class animal{
    private float size;
    public void animal(Float size) {
        size = size;
    }
    public void jiao (String type){
        system.out.println(type);
    }
}

public class cat extends animal{
    public void cat(String size){
        size = size;
    }
    public void jiao(){
        system.out.println('喵喵喵')
    }
     public void jiao(String  prefix, String sufix ){
        system.out.println(prefix + '喵喵喵' + sufix)
    }
}

Java多態(tài)的分類
1眷蜓、編譯時多態(tài),即方法的重載 ( 多個名字想同的函數(shù) 參數(shù)不同胎围,) 吁系,從JVM的角度來講,這是一種靜態(tài)分派(static dispatch)
2白魂、運行時多態(tài)汽纤,即方法的重寫 ( 運行時父類繼承的方法或變量會被重新,每個對象狀態(tài)都不一樣福荸,從字面意思來看也是一種多態(tài)蕴坪。 ) ,從JVM的角度來講敬锐,這是一種動態(tài)分派(dynamic dispatch)辞嗡。

其實在js中多態(tài)更加簡單:

function animal(size,jiaosheng){
    this.size = size;
    this.jiaosheng = jiaosheng
    this.jiao = function(){
      console.log(this.jiaosheng)
    }
}

function cat (size,jiaosheng){
  animal.call(this,arguments)
}
var aniIns = new animal('3米','lallal')
cat.prototype = aniIns;
catPiPi = new cat('1米','喵喵喵');
catYaoRan = new cat('1.5米'捆等,'喵嗚喵嗚');
catPiPi.jiao() // '喵喵喵' 
catYaoRan.jiao() // '喵嗚喵嗚'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市续室,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谒养,老刑警劉巖挺狰,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異买窟,居然都是意外死亡丰泊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門始绍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞳购,“玉大人,你說我怎么就攤上這事亏推⊙” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵吞杭,是天一觀的道長盏浇。 經(jīng)常有香客問我,道長芽狗,這世上最難降的妖魔是什么绢掰? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮童擎,結(jié)果婚禮上滴劲,老公的妹妹穿的比我還像新娘。我一直安慰自己顾复,他們只是感情好班挖,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捕透,像睡著了一般聪姿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乙嘀,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天末购,我揣著相機與錄音,去河邊找鬼虎谢。 笑死盟榴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的婴噩。 我是一名探鬼主播擎场,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼羽德,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了迅办?” 一聲冷哼從身側(cè)響起宅静,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎站欺,沒想到半個月后姨夹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡矾策,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年磷账,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贾虽。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡逃糟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蓬豁,到底是詐尸還是另有隱情绰咽,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布庆尘,位于F島的核電站剃诅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏驶忌。R本人自食惡果不足惜矛辕,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望付魔。 院中可真熱鬧聊品,春花似錦、人聲如沸几苍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妻坝。三九已至伸眶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刽宪,已是汗流浹背厘贼。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留圣拄,地道東北人嘴秸。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岳掐。 傳聞我的和親對象是個殘疾皇子凭疮,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,101評論 1 32
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時...
    歐辰_OSR閱讀 29,385評論 8 265
  • 1、什么是前置操作串述? 構(gòu)造方法可以看作類中所有方法的前置操作执解,而前置操作更強大,不僅可以把某個方法指定為全部方法的...
    傲嬌的泰迪閱讀 888評論 0 1
  • 這是一個可憐的孩子纲酗,他擁有白而無光的生命材鹦。經(jīng)過他的有口痰鼻涕,還有油垢各種污染耕姊。連其他真正的小孩也不在意他存在的意...
    李一十八閱讀 262評論 1 5
  • 氣血對女性身體健康的重要性不言而喻,很多年輕女孩不懂得保護自己熊咽,經(jīng)常流產(chǎn)莫鸭,覺得這是小事,沒什么大不了的横殴。 很多女性...
    smile_cae3閱讀 280評論 0 0