第六章 面向?qū)ο蟮某绦蛟O(shè)計(jì)

1.構(gòu)造函數(shù)始終都應(yīng)該以一個大寫字母開頭


2.雖然可以通過對象實(shí)例訪問保存在原型中的值双絮,但卻不能通過對象實(shí)例重寫原型中的值


3.在使用for-in循環(huán)時模狭,返回的是所有能夠通過對象訪問的汤踏、可枚舉的屬性,其中既包括存在于實(shí)例中的屬性怔揩,也包括存在于原型中的屬性


4.在創(chuàng)建自定義類型最常見的方式蔗坯,就是將構(gòu)造函數(shù)模式用于定于實(shí)例屬性,而原型模式用于定義方法和共享的屬性频祝。這種方法最大限度地節(jié)省了內(nèi)存泌参,還支持想構(gòu)造函數(shù)傳遞參數(shù)


5.寄生構(gòu)造函數(shù)模式,構(gòu)造函數(shù)返回的對象與在構(gòu)造函數(shù)外創(chuàng)建的對象沒有什么不同常空,因此沽一,不能依賴instanceof操作符來確定對象類型


6.兩種繼承方式:接口繼承和實(shí)現(xiàn)繼承。接口只繼承方法簽名漓糙,而實(shí)現(xiàn)繼承則繼承實(shí)際的方法铣缠。ECMAScript只支持實(shí)現(xiàn)繼承,主要依靠原型鏈實(shí)現(xiàn)的昆禽。


7.構(gòu)造函數(shù)蝗蛙、原型和實(shí)例的關(guān)系:每個構(gòu)造函數(shù)都有一個原型對象,原型對象都包含一個指向構(gòu)造函數(shù)的指針醉鳖,而實(shí)例都包含一個指向原型對象的內(nèi)部指針


8.給原型添加方法的代碼一定要放在替換原型的語句之后


9.在通過原型鏈實(shí)現(xiàn)繼承時捡硅,不能使用對象字面量創(chuàng)建原型方法,因?yàn)檫@樣會重寫原型鏈


10.借用構(gòu)造函數(shù):在子類型構(gòu)造函數(shù)的內(nèi)部調(diào)用超類型構(gòu)造函數(shù)


11.組合繼承:將原型鏈和借用構(gòu)造函數(shù)技術(shù)組合到一起盗棵。使用原型鏈實(shí)現(xiàn)對原型屬性和方法的繼承壮韭,而通過借用構(gòu)造函數(shù)來實(shí)現(xiàn)對實(shí)例屬性的繼承北发。其最大的問題就是無論在聲明情況下,都會調(diào)用兩次超類型構(gòu)造函數(shù):一次是在創(chuàng)建子類型原型的時候喷屋,另一次是在子類型構(gòu)造函數(shù)內(nèi)部琳拨。


12.寄生式繼承:創(chuàng)建一個僅用于封裝繼承過程的函數(shù),該函數(shù)在內(nèi)部以某種方式來增強(qiáng)對象屯曹,最后再返回對象


13.寄生組合式繼承:通過借用構(gòu)造函數(shù)來繼承屬性狱庇,通過原型鏈的混成形式來繼承方法。開發(fā)人員普遍認(rèn)為寄生組合式繼承是引用類型最理想的繼承范式


14.在沒有類的情況下恶耽,可以采用下列模式創(chuàng)建對象:

①對象字面量:

var person = {

? ? ? ? name: "Kaitlyn"密任,

? ? ? ? age: 22,

? ? ? ? job: "Front - End Engineer",

? ? ? ? sayName: function(){

? ? ? ? ? ? ? ? alert(this.name);

? ? ? ? }

};

缺點(diǎn):使用同一個接口創(chuàng)建很多對象,會產(chǎn)生大量的重復(fù)代碼驳棱。

②工廠模式:

function createPerson(name, age, job){

? ? ? ? var o = new Object();

? ? ? ? ?o.name=name;

? ? ? ? o.age=age;

? ? ? ? o.job=job;

? ? ? ? o.sayName = function(){

? ? ? ? ? ? ? ? alert(this.name);

? ? ? ? }

? ? ? ? return o;

}

var person1 = createPerson("Kaitlyn", 22, "Front - End Engineer");

var person2 = createPerson("Greg", 27, "Doctor");

缺點(diǎn):該模式產(chǎn)生的所有對象的類型都是Object批什。

③構(gòu)造函數(shù)模式:

function Person(name, age, job){

? ? ? ? this. name=name;

? ? ? ? this. age=age;

? ? ? ? this. job=job;

? ? ? ? this. sayName = function(){

? ? ? ? ? ? ? ? alert(this.name);

? ? ? ? }

}

var person1 = new Person("Kaitlyn", 22, "Front - End Engineer");

var person2 = new Person("Greg", 27, "Doctor");

缺點(diǎn):每個方法都要在每個實(shí)例上重新創(chuàng)建一遍

④原型模式:

function Person(){

}

Person.prototype = {

? ? ? ? name: "Kaitlyn",

? ? ? ? age: 22,

? ? ? ? job: "Front - End Engineer",

? ? ? ? friends = ["Greg", "Court"];

? ? ? ? sayName: function(){

? ? ? ? ? ? ? ? alert(this.name);

? ? ? ? }

}

var me = new Person();

缺點(diǎn):所有實(shí)例在默認(rèn)情況下都取得相同的屬性值社搅;對于包含引用類型值的屬性來說驻债,比如數(shù)組,若一個實(shí)例向數(shù)組中添加了一個字符串?dāng)?shù)組形葬,那么另一個實(shí)例的數(shù)組也被修改了合呐。

⑤組合使用構(gòu)造函數(shù)模式和原型模式:

function Person(name, age, job){

? ? ? ? this. name = name;

? ? ? ? this. age = age;

? ? ? ? this. job = job;

? ? ? ? this. friends = ["Greg", "Court"];

}

Person.prototype = {

? ? ? ? constructor: Person,

? ? ? ? sayName: function(){

? ? ? ? ? ? ? ? alert(this.name);

? ? ? ? }

}

var person1 = new Person("Kaitlyn", 22, "Front - End Engineer");

var person2 = new Person("Greg", 27, "Doctor");

⑥動態(tài)原型模式

⑦寄生構(gòu)造函數(shù)模式

⑧穩(wěn)妥構(gòu)造函數(shù)模式


15.繼承模式:

①原型式繼承:

②寄生式繼承:

③組合式繼承:

④寄生組合式繼承:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市笙以,隨后出現(xiàn)的幾起案子淌实,更是在濱河造成了極大的恐慌,老刑警劉巖猖腕,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拆祈,死亡現(xiàn)場離奇詭異,居然都是意外死亡倘感,警方通過查閱死者的電腦和手機(jī)放坏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來老玛,“玉大人淤年,你說我怎么就攤上這事±” “怎么了贫贝?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵焙贷,是天一觀的道長仅炊。 經(jīng)常有香客問我寓涨,道長,這世上最難降的妖魔是什么娇唯? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任齐遵,我火速辦了婚禮凤巨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘洛搀。我一直安慰自己,他們只是感情好佑淀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布留美。 她就那樣靜靜地躺著,像睡著了一般伸刃。 火紅的嫁衣襯著肌膚如雪谎砾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天捧颅,我揣著相機(jī)與錄音景图,去河邊找鬼。 笑死碉哑,一個胖子當(dāng)著我的面吹牛挚币,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播扣典,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼妆毕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贮尖?” 一聲冷哼從身側(cè)響起笛粘,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎湿硝,沒想到半個月后薪前,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡关斜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年示括,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚤吹。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡例诀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出裁着,到底是詐尸還是另有隱情繁涂,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布二驰,位于F島的核電站扔罪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏桶雀。R本人自食惡果不足惜矿酵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一唬复、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧全肮,春花似錦敞咧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至评疗,卻和暖如春测砂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背百匆。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工砌些, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人加匈。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓存璃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親矩动。 傳聞我的和親對象是個殘疾皇子有巧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

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