面向?qū)ο缶幊蹋ㄒ唬?- 封裝

在JavaScript中萬物皆對(duì)象跳纳,面向?qū)ο缶幊虒?duì)象抽象成類 通過類來創(chuàng)建對(duì)象 與面向過程相比 大大提高了程序的可維護(hù)性 可擴(kuò)展性 簡單來說就是 以類的方式組織代碼 以對(duì)象的方式組織數(shù)據(jù) 窃植。但是又不能說是一個(gè)真正意義上的面向?qū)ο螅╫op)語言,因?yàn)樗鼪]有類(class),雖然說在ES6中有關(guān)鍵字class,但這只是對(duì)構(gòu)造函數(shù)做的一個(gè)封裝而已赴背;那么在ES5中旋奢,我們想要模擬一個(gè)類的話,把屬性和方法放到一個(gè)對(duì)象里面湃缎,這個(gè)組合的過程就叫做封裝岁忘。我們用一句話概括就是:?把客觀事物封裝成抽象的類,隱藏屬性和方法的實(shí)現(xiàn)細(xì)節(jié)深员,僅對(duì)外公開接口 负蠕。?

一、普通生成實(shí)例對(duì)象

? ? 我們假設(shè)為一個(gè)用戶a創(chuàng)建一個(gè)對(duì)象倦畅,對(duì)象里面有name和age兩個(gè)屬性:
? ? ? ?var a = {
? ? ? ? ? ? name: "張三"遮糖,

? ? ? ? ? ? age: 23

????????}

? ? 接著我們依據(jù)這個(gè)對(duì)象的模式,為第二個(gè)用戶b也生成一條數(shù)據(jù):

????var b = {

????????name: "李四"叠赐,

????????age: 25

? }

這個(gè)就是最普通的封裝了欲账,很明顯的看出了它的缺點(diǎn):

1、當(dāng)我們要?jiǎng)?chuàng)建多個(gè)用戶的話還必須這樣創(chuàng)建多個(gè)對(duì)象芭概,代碼重復(fù)太麻煩了赛不;

?2、兩個(gè)對(duì)象之間并沒有發(fā)現(xiàn)它們之間有什么樣的關(guān)聯(lián)罢洲;

二踢故、改進(jìn)

依照上面的方法我們可以用一個(gè)公用的方法,來避免代碼過多的問題:

function create(name, age) {

????return {

? ? ? ? name: name,

? ? ? ? age: age
????}

}

var a =? create('張三',? 23)

var b = create('李四'惹苗,25)

這種方法解決了上個(gè)方法重復(fù)代碼的問題的問題畴椰,缺依舊沒有看到a和b之間沒有內(nèi)在的聯(lián)系,不能反映出它們是同一個(gè)原型對(duì)象的實(shí)例鸽粉。

三斜脂、使用構(gòu)造函數(shù):

創(chuàng)建對(duì)象的方式包括兩種:對(duì)象字面量和使用new表達(dá)式,我們上面的方法都是使用對(duì)象字面量的方法触机,發(fā)現(xiàn)并不能滿足我們預(yù)期的效果帚戳;new表達(dá)式是配合構(gòu)造函數(shù)使用的,所謂"構(gòu)造函數(shù)"儡首,內(nèi)部使用了this變量片任。對(duì)構(gòu)造函數(shù)使用new運(yùn)算符,就能生成實(shí)例蔬胯,并且this變量會(huì)綁定在實(shí)例對(duì)象上对供。簡單來說,構(gòu)造函數(shù)就是你用new關(guān)鍵字創(chuàng)建對(duì)象時(shí)調(diào)用的函數(shù)。

以上的原型可以這樣寫:

????function create(name,age){

    this.name=name;

    this.age=age;

  }

依據(jù)原型我們生成實(shí)例:

var a =? new create('張三',? 23)

var b =? new create('李四', 25)

我們不僅能夠使代碼更加簡潔产场,還能夠看出實(shí)例對(duì)象與原型對(duì)象之間的關(guān)系鹅髓,我們可以通過實(shí)例對(duì)象的constructor屬性來判斷生成它的構(gòu)造函數(shù)對(duì)象:

console.log(a.constructor === b.constructor)? //true

三、構(gòu)造函數(shù)的優(yōu)化:

雖然構(gòu)造函數(shù)能夠很好的實(shí)現(xiàn)封裝京景,但是它本身也存在的問題點(diǎn)就是現(xiàn)在構(gòu)造函數(shù)里面的屬性都是根據(jù)實(shí)例傳過來的參數(shù)來動(dòng)態(tài)確定的窿冯,那么我們想在這個(gè)對(duì)象里面定義一個(gè)變的屬性,比如:

????function create(name,age){

    this.name=name;

    this.age=age;

? ? ? ? ? ? ? ?this.address = '廈門'

  }

這樣導(dǎo)致每生成一個(gè)實(shí)例的話都要去定義一個(gè)相同的內(nèi)容确徙,導(dǎo)致浪費(fèi)的內(nèi)存醒串,這個(gè)時(shí)候我們可以運(yùn)用到上一節(jié)說到的原型鏈的概念:把不變的屬性和方法放到構(gòu)造函數(shù)的prototype屬性指向的對(duì)象里面,生成的實(shí)例都能夠得到繼承鄙皇。在下一章也將詳細(xì)的分享面向?qū)ο蟮睦^承芜赌。針對(duì)以上代碼優(yōu)化后的結(jié)果如下:

????function create(name,age){

    this.name=name;

    this.age=age;

  }

create.prototype.address = '廈門'

以上是自己作為一位幫運(yùn)工的一個(gè)概括和分享,歡迎大家的指正和批評(píng)伴逸。缠沈。

在下一章我們將來探討面向?qū)ο缶幊痰牡诙€(gè)內(nèi)容 -- 繼承。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末违柏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子香椎,更是在濱河造成了極大的恐慌漱竖,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畜伐,死亡現(xiàn)場(chǎng)離奇詭異馍惹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)玛界,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門万矾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人慎框,你說我怎么就攤上這事良狈。” “怎么了笨枯?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵薪丁,是天一觀的道長。 經(jīng)常有香客問我馅精,道長严嗜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任洲敢,我火速辦了婚禮漫玄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘压彭。我一直安慰自己睦优,他們只是感情好渗常,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刨秆,像睡著了一般凳谦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衡未,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天尸执,我揣著相機(jī)與錄音,去河邊找鬼缓醋。 笑死如失,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的送粱。 我是一名探鬼主播褪贵,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抗俄!你這毒婦竟也來了脆丁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤动雹,失蹤者是張志新(化名)和其女友劉穎槽卫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胰蝠,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歼培,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了茸塞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躲庄。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钾虐,靈堂內(nèi)的尸體忽然破棺而出噪窘,到底是詐尸還是另有隱情,我是刑警寧澤效扫,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布效览,位于F島的核電站,受9級(jí)特大地震影響荡短,放射性物質(zhì)發(fā)生泄漏丐枉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一掘托、第九天 我趴在偏房一處隱蔽的房頂上張望瘦锹。 院中可真熱鬧,春花似錦、人聲如沸弯院。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽听绳。三九已至颂碘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間椅挣,已是汗流浹背头岔。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鼠证,地道東北人峡竣。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像量九,于是被迫代替她去往敵國和親适掰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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