Javascript prototype

js編程半年咕宿,起初沒有用OOP的方式(一是因?yàn)閖s的class理解起來有點(diǎn)困難溢豆,二是覺得當(dāng)前業(yè)務(wù)沒有那么復(fù)雜蜒简,無需用OOP,三是進(jìn)度優(yōu)先漩仙,能實(shí)現(xiàn)功能就OK)搓茬。但半年后的現(xiàn)在,越來越發(fā)現(xiàn)面向過程的代碼維護(hù)起來很費(fèi)勁——因?yàn)闆]有封裝队他、繼承卷仑。故不得不緩一緩步子,硬著頭皮再次撿起js的OOP來麸折。

讓我茅塞頓開的是 Vjeux的文章锡凝,也要感謝引路人阮一峰老師。Vjeux的文章已經(jīng)夠好垢啼,不再自己寫了——也怕寫不好窜锯。針對(duì)ECMA-262中對(duì)prototype解釋圖自己寫了相應(yīng)的代碼张肾,發(fā)出來,幫助學(xué)習(xí)者理解:

本文中的英文copy自ECMA-262

Prototype

CF is a constructor (and also an object). Five objects have been created by using new expressions: cf1, cf2, cf3, cf4, and cf5. Each of these objects contains properties named q1 and q2. The dashed lines represent the implicit prototype relationship; so, for example, cf3’s prototype is CFp. The constructor, CF, has two properties itself, named P1 and P2, which are not visible to CFp, cf1, cf2, cf3, cf4, or cf5. The property named CFP1 in CFp is shared by cf1, cf2, cf3, cf4, and cf5 (but not by CF), as are any properties found in CFp’s implicit prototype chain that are not named q1, q2, or CFP1. Notice that there is no implicit prototype link between CF and CFp.

my code(在chrome(version: 50.0.2661.102)運(yùn)行通過):

function CF() {
    this.q1 = 'q1';
    this.q2 = 'q2';
}

var CFp = { 
    CFP1: 'cfp1'
};
CF.prototype = CFp;
// 一般是直接將CFp的定義賦給prototype锚扎,無需先定義變量(圖中為了說明問題捌浩,所以費(fèi)勁取名)。如下:
// CF.prototype = {
//      CFP1: 'cfp1'
// }
CF.P1 = 'p1'; // 實(shí)際工作中工秩,這類屬性基本沒什么用吧尸饺?
CF.P2 = 'p2';

var cf1 = new CF();
var cf2 = new CF();
// cf3 ~ cf5相同

console.log(cf1.q1);   // 'q1'
console.log(cf1.q2);   // 'q2'
console.log(cf1.CFP1); // 'cfp1'
console.log('---');

console.log(cf1.P1);   // undefined, because 'P1 and P2  are not visible to CFp, cf1, ...' 
console.log(cf1.P2);   // undefined
console.log('---');

console.log(CF.P1);    // 'p1'
console.log(CF.CFP1);  // undefined, because 'there is no implicit prototype link between CF and CFp'
console.log(CF.q1);    // undefined 

幾個(gè)關(guān)鍵定義:

constructor

function object that creates and initializes objects
NOTE The value of a constructor’s prototype property is a prototype object that is used to implement inheritance and shared properties.

prototype

object that provides shared properties for other objects
NOTE When a constructor creates an object, that object implicitly references the constructor’s prototype property for the purpose of resolving property references. The constructor’s prototype property can be referenced by the program expression constructor.prototype, and properties added to an object’s prototype are shared, through inheritance, by all objects sharing the prototype. Alternatively, a new object may be created with an explicitly specified prototype by using the Object.create built-in function.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市助币,隨后出現(xiàn)的幾起案子浪听,更是在濱河造成了極大的恐慌,老刑警劉巖眉菱,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迹栓,死亡現(xiàn)場離奇詭異,居然都是意外死亡俭缓,警方通過查閱死者的電腦和手機(jī)克伊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來华坦,“玉大人愿吹,你說我怎么就攤上這事∠Ы悖” “怎么了犁跪?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長歹袁。 經(jīng)常有香客問我坷衍,道長,這世上最難降的妖魔是什么条舔? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任枫耳,我火速辦了婚禮,結(jié)果婚禮上孟抗,老公的妹妹穿的比我還像新娘迁杨。我一直安慰自己,他們只是感情好夸浅,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布仑最。 她就那樣靜靜地躺著,像睡著了一般帆喇。 火紅的嫁衣襯著肌膚如雪警医。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音预皇,去河邊找鬼侈玄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吟温,可吹牛的內(nèi)容都是我干的序仙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼鲁豪,長吁一口氣:“原來是場噩夢啊……” “哼潘悼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起爬橡,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤治唤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糙申,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宾添,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年柜裸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缕陕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疙挺,死狀恐怖扛邑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衔统,我是刑警寧澤鹿榜,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站锦爵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奥裸。R本人自食惡果不足惜险掀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望湾宙。 院中可真熱鬧樟氢,春花似錦、人聲如沸侠鳄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伟恶。三九已至碴开,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背潦牛。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工眶掌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巴碗。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓朴爬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親橡淆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子召噩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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