JavaScript中對象的構(gòu)造模式(類的模仿)

為什么叫類的模仿,因為JS中沒有類的概念适篙,也就是沒有class這個東東往核,畢竟是為了趕時髦才加上java這個詞的,跟java可是一點關(guān)系沒有嚷节,也沒有java中典型的class的概念聂儒,但是作為一門強大的腳本語言如何去面向?qū)ο竽兀蔷褪抢脴?gòu)造函數(shù)模仿類的功能

1硫痰、工廠模式創(chuàng)建對象

這是最原始的創(chuàng)建對象的方法衩婚,原理也很簡單,就是封裝了一個返回值為對象的函數(shù)

function createObject(name,age){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.sayName = function(){
        alert(this.name);
    }
    return o;
}
var person1 = createObject('小明','18');
person1.sayName();
var person2 = createObject('小紅','17');
person2.sayName();

這樣就能通過函數(shù)createObject不斷的創(chuàng)建對象了碍论,但是谅猾,我們想模仿的是類的概念,但是這里所創(chuàng)建的每一個對象都沒有辦法識別是什么類型,看下面代碼:

alert(person1 instanceof Object); //true
alert(person2 instanceof Object); //true

這里創(chuàng)建出來的變量person1和person2都是Object類型的税娜,并不符合面向?qū)ο罄锩娴?分類'的概念坐搔,比如我想讓創(chuàng)建出來的對象都屬于一個范疇的,就拿這里的person1和person2來說敬矩,這兩個對象應該都屬于人的范圍概行,應該有一個代表人的類型來專門給他們分類,為了解決這個問題弧岳,就有了第二種方法:

2凳忙、構(gòu)造函數(shù)創(chuàng)建對象

通過一個構(gòu)造函數(shù)來創(chuàng)建對象

function person(name,age){
    this.name = name;
    this.age = age;
    this.sayName = function(){
        alert(this.name);
    }
}
person1 = new person('小明',18);
person2 = new person('小紅',17);
person1.sayName();   //小明
person2.sayName();   //小紅

這種方法很好的解決了對象識別的問題,如下代碼:

alert(person1 instanceof Object); //true
alert(person1 instanceof person); //true
alert(person2 instanceof Object); //true
alert(person2 instanceof person); //true

會發(fā)現(xiàn)person1和person2不僅是object類型的實例禽炬,還都是person類型的實例
構(gòu)造函數(shù)方法創(chuàng)建對象能夠滿足最基本“類的模仿”涧卵,但嚴格來說還有很多問題,比如這里用構(gòu)造函數(shù)每創(chuàng)建一個對象就要單獨開辟一塊內(nèi)存空間腹尖,但實際上對象里的很多屬性常常是可以共用的柳恐,比如說這里的sayName方法,每個對象里都有這個方法热幔,為什么不在內(nèi)存空間里只開辟一塊地方存它乐设,然后讓所有對象都從這塊地方調(diào)用它呢,為了實現(xiàn)這個原理绎巨,就有了原型的使用近尚。

3、JS中的原型

未完待續(xù)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末场勤,一起剝皮案震驚了整個濱河市戈锻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌和媳,老刑警劉巖舶沛,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異窗价,居然都是意外死亡,警方通過查閱死者的電腦和手機叹卷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門撼港,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人骤竹,你說我怎么就攤上這事帝牡。” “怎么了蒙揣?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵靶溜,是天一觀的道長。 經(jīng)常有香客問我,道長罩息,這世上最難降的妖魔是什么嗤详? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮瓷炮,結(jié)果婚禮上葱色,老公的妹妹穿的比我還像新娘。我一直安慰自己娘香,他們只是感情好苍狰,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烘绽,像睡著了一般淋昭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上安接,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天翔忽,我揣著相機與錄音,去河邊找鬼赫段。 笑死呀打,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的糯笙。 我是一名探鬼主播贬丛,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼给涕!你這毒婦竟也來了豺憔?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤够庙,失蹤者是張志新(化名)和其女友劉穎恭应,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體耘眨,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡昼榛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剔难。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胆屿。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖偶宫,靈堂內(nèi)的尸體忽然破棺而出非迹,到底是詐尸還是另有隱情,我是刑警寧澤纯趋,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布憎兽,位于F島的核電站冷离,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纯命。R本人自食惡果不足惜西剥,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扎附。 院中可真熱鬧蔫耽,春花似錦、人聲如沸留夜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碍粥。三九已至鳖眼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚼摩,已是汗流浹背钦讳。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枕面,地道東北人愿卒。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像潮秘,于是被迫代替她去往敵國和親琼开。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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