JS 系列一: Javascript 定義類(class)的三種方法

在面向?qū)ο缶幊讨谐贩溃悾╟lass)是對(duì)象(object)的模板,定義了同一組對(duì)象共有的屬性和方法咆瘟。

Javascript語(yǔ)言不支持“類”嚼隘, 但是可以用一些變通的方法,模擬出“類”袒餐。

一飞蛹、構(gòu)造函數(shù)法

經(jīng)典的方法,書上也是這樣教的灸眼。它用構(gòu)造函數(shù)模擬類卧檐,在內(nèi)部用this關(guān)鍵字指代實(shí)例對(duì)象。

生成實(shí)例的時(shí)候焰宣,使用new關(guān)鍵字霉囚。

類的屬性和方法,還可以定義在構(gòu)造函數(shù)的prototype對(duì)象之上匕积。(具體什么是prototype, 后面找機(jī)會(huì)再研究吧)

二盈罐、Object.create() 方法

為了解決生成對(duì)象麻煩榜跌,Javascript國(guó)際標(biāo)準(zhǔn)提出一個(gè)新的方法Object.create()。用這個(gè)方法盅粪,“類”就是一個(gè)對(duì)象钓葫,不是函數(shù)。

然后直接用Object.create()生成實(shí)例湾揽,不需要用到new瓤逼。

目前,各大瀏覽器的最新版本(包括IE9)都部署了這個(gè)方法库物。如果遇到老式瀏覽器霸旗,可以用下面的代碼自行部署。

這種方法比"構(gòu)造函數(shù)法"簡(jiǎn)單戚揭,但是不能實(shí)現(xiàn)私有屬性和私有方法诱告,實(shí)例對(duì)象之間也不能共享數(shù)據(jù),對(duì)"類"的模擬不夠全面民晒。

三精居、極簡(jiǎn)主義

"極簡(jiǎn)主義法"(minimalist approach)

1、封裝

這種方法不使用this和prototype潜必,代碼部署起來(lái)非常簡(jiǎn)單靴姿,這大概也是它被叫做"極簡(jiǎn)主義法"的原因。 首先磁滚,它也是用一個(gè)對(duì)象模擬"類"佛吓。在這個(gè)類里面,定義一個(gè)構(gòu)造函數(shù)createNew()垂攘,用來(lái)生成實(shí)例维雇。

然后,在createNew()里面晒他,定義一個(gè)實(shí)例對(duì)象吱型,把這個(gè)實(shí)例對(duì)象作為返回值。

使用的時(shí)候陨仅,調(diào)用createNew()方法津滞,就可以得到實(shí)例對(duì)象。

這種方法的好處是灼伤,容易理解据沈,結(jié)構(gòu)清晰優(yōu)雅,符合傳統(tǒng)的"面向?qū)ο缶幊?的構(gòu)造饺蔑,因此可以方便地部署下面的特性。

2嗜诀、繼承

讓一個(gè)類繼承另一個(gè)類猾警,實(shí)現(xiàn)起來(lái)很方便孔祸。只要在前者的createNew()方法中,調(diào)用后者的createNew()方法即可发皿。 先定義一個(gè)Animal類崔慧。

然后,在Dog的createNew()方法中穴墅,調(diào)用Animal的createNew()方法惶室。

這樣得到的Cat實(shí)例,就會(huì)同時(shí)繼承Cat類和Animal類玄货。

3皇钞、私有屬性和私有方法

在createNew()方法中,只要不是定義在dog對(duì)象上的方法和屬性松捉,都是私有的夹界。

上例的內(nèi)部變量sound,外部無(wú)法讀取隘世,只有通過(guò)dog的公有方法makeSound()來(lái)讀取可柿。

4、數(shù)據(jù)共享

有時(shí)候丙者,我們需要所有實(shí)例對(duì)象复斥,能夠讀寫同一項(xiàng)內(nèi)部數(shù)據(jù)。這個(gè)時(shí)候械媒,只要把這個(gè)內(nèi)部數(shù)據(jù)目锭,封裝在類對(duì)象的里面、createNew()方法的外面即可滥沫。

然后侣集,生成兩個(gè)實(shí)例對(duì)象

這時(shí),如果有一個(gè)實(shí)例對(duì)象兰绣,修改了共享的數(shù)據(jù)世分,另一個(gè)實(shí)例對(duì)象也會(huì)受到影響。

后記:由于工作需要缀辩,最近開始學(xué)習(xí)JS 和 node.js開發(fā)臭埋,之前接觸的比較少,內(nèi)容中有什么不對(duì)的希望大家可以及時(shí)指出臀玄,謝謝瓢阴。

本人之前一直從事android方面的開發(fā),如果有什么android方面的問(wèn)題歡迎隨時(shí)交流健无。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荣恐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌叠穆,老刑警劉巖少漆,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異硼被,居然都是意外死亡示损,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門嚷硫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)检访,“玉大人,你說(shuō)我怎么就攤上這事仔掸〈喙螅” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嘉汰,是天一觀的道長(zhǎng)丹禀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)鞋怀,這世上最難降的妖魔是什么双泪? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮密似,結(jié)果婚禮上焙矛,老公的妹妹穿的比我還像新娘。我一直安慰自己残腌,他們只是感情好村斟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抛猫,像睡著了一般蟆盹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闺金,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天逾滥,我揣著相機(jī)與錄音,去河邊找鬼败匹。 笑死寨昙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掀亩。 我是一名探鬼主播舔哪,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼槽棍!你這毒婦竟也來(lái)了捉蚤?” 一聲冷哼從身側(cè)響起抬驴,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎缆巧,沒(méi)想到半個(gè)月后怎爵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盅蝗,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姆蘸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片墩莫。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖逞敷,靈堂內(nèi)的尸體忽然破棺而出狂秦,到底是詐尸還是另有隱情,我是刑警寧澤推捐,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布裂问,位于F島的核電站,受9級(jí)特大地震影響牛柒,放射性物質(zhì)發(fā)生泄漏堪簿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一皮壁、第九天 我趴在偏房一處隱蔽的房頂上張望椭更。 院中可真熱鬧,春花似錦蛾魄、人聲如沸虑瀑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)舌狗。三九已至,卻和暖如春扔水,著一層夾襖步出監(jiān)牢的瞬間痛侍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工铭污, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恋日,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓嘹狞,卻偏偏與公主長(zhǎng)得像岂膳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子磅网,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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

  • 一:java概述:1谈截,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,650評(píng)論 0 11
  • 作者:阮一峰簸喂, 日期:2012年 7月 9日毙死, 鏈接:http://www.ruanyifeng.com/bl...
    藍(lán)淺藍(lán)深閱讀 253評(píng)論 0 0
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來(lái)...
    XLsn0w閱讀 1,222評(píng)論 0 2
  • 終于還是出來(lái)了喻鳄。因?yàn)闆](méi)辦法安心工作扼倘,加上還是那股刺激的味道,讓我更加多了個(gè)偷懶的理由除呵。人總是喜歡為自己所做的事找借...
    流浪癡人閱讀 189評(píng)論 0 0
  • 小三再菊,我知道很多女人聽到這個(gè)詞就會(huì)心跳加快,血管噴張颜曾,想要?jiǎng)邮珠_撕纠拔。世人有多恨小三?在之前的熱播劇《我的前半生》中...
    冷愛(ài)閱讀 5,511評(píng)論 4 21