Javascript:prototype屬性

在閱讀這篇文章時(shí)摆霉,請你先清空腦中所有對原型一知半解的印象,首先來看Javascript中函數(shù)所具有的一個(gè)屬性:prototype.

先看下面這個(gè)例子:

function f() { } // define a function f

console.log(f.prototype.constructor === f); // true

運(yùn)行上面代碼

當(dāng)我們創(chuàng)建一個(gè)函數(shù)f究珊,這個(gè)函數(shù)會自動具有一個(gè)屬性prototype荆萤,這個(gè)屬性即為函數(shù)f的原型感猛。并且這個(gè)它的原型自動會具有一個(gè)屬性constructor,指向函數(shù)f没龙。這里我們可以看出一種一一對應(yīng)關(guān)系铺厨,即一個(gè)函數(shù)具有一個(gè)原型缎玫,而這個(gè)原型又通過屬性constructor指明它是哪一個(gè)函數(shù)的原型。

可是原型有什么用呢解滓?讓我們來看一個(gè)創(chuàng)建對象的例子:

function Car(brand, year) {
  this.brand = brand;
  this.year = year;
} // 定義一個(gè)函數(shù)Car

let car = new Car("瑪莎拉蒂", 2014);  // 從函數(shù)Car創(chuàng)建一個(gè)對象
console.log(car.brand); // 瑪莎拉蒂
console.log(car.year);  // 2014
console.log(car.has_wheels);  // undefined赃磨,因?yàn)槲覀儧]有定義has_wheels屬性
car.drive();  // 報(bào)錯(cuò),因?yàn)槲覀儧]有定義drive函數(shù)

運(yùn)行上面代碼

上面的代碼中洼裤,brandyear都是每一輛車所獨(dú)有的邻辉,但屬性has_wheels與函數(shù)drive剛是所有的車所共有的。下面的代碼展示了腮鞍,如何用原型來實(shí)現(xiàn)這種“共有”的屬性和函數(shù)值骇。

function Car(brand, year) {
  this.brand = brand;
  this.year = year;
} // 定義一個(gè)函數(shù)Car

Car.prototype.has_wheels = true;
Car.prototype.drive = function() {
  console.log("driving...");
}

let car = new Car("瑪莎拉蒂", 2014);  // 從函數(shù)Car創(chuàng)建一個(gè)對象
console.log(car.brand); // 瑪莎拉蒂
console.log(car.year);  // 2014
console.log(car.has_wheels);  // true
car.drive();  // 打印出driving

運(yùn)行上面代碼

從上面的代碼,我們可以很容易地了解到Javascript對于面向?qū)ο蟮脑O(shè)計(jì)思想移国,那就是

  1. 使用new函數(shù)并配合構(gòu)造函數(shù)(constructor)來創(chuàng)建對象吱瘩,
  2. 運(yùn)行構(gòu)造函數(shù)(constructor)來設(shè)置對象“獨(dú)有”的屬性和方法,
  3. 對構(gòu)造函數(shù)(constructor)的prototype進(jìn)行更改可以對所有由它創(chuàng)建的對象設(shè)置“共有”的屬性和方法迹缀。

要注意的是使碾,只有函數(shù)有prototype屬性,也就是說只有函數(shù)有原型裹芝,而非函數(shù)的對象是沒有的部逮。

更多關(guān)于原型的探討請參見:

  1. JavaScript:prototype屬性
  2. JavaScript:內(nèi)部屬性[[Prototype]]
  3. Javascript:原型與類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娜汁,一起剝皮案震驚了整個(gè)濱河市嫂易,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掐禁,老刑警劉巖怜械,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異傅事,居然都是意外死亡缕允,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進(jìn)店門蹭越,熙熙樓的掌柜王于貴愁眉苦臉地迎上來障本,“玉大人,你說我怎么就攤上這事响鹃〖菟” “怎么了?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵买置,是天一觀的道長粪糙。 經(jīng)常有香客問我,道長忿项,這世上最難降的妖魔是什么蓉冈? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任城舞,我火速辦了婚禮,結(jié)果婚禮上寞酿,老公的妹妹穿的比我還像新娘家夺。我一直安慰自己,他們只是感情好伐弹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布秦踪。 她就那樣靜靜地躺著,像睡著了一般掸茅。 火紅的嫁衣襯著肌膚如雪椅邓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天昧狮,我揣著相機(jī)與錄音景馁,去河邊找鬼。 笑死逗鸣,一個(gè)胖子當(dāng)著我的面吹牛合住,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播撒璧,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼透葛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卿樱?” 一聲冷哼從身側(cè)響起僚害,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎繁调,沒想到半個(gè)月后萨蚕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹄胰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年岳遥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裕寨。...
    茶點(diǎn)故事閱讀 38,747評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浩蓉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出宾袜,到底是詐尸還是另有隱情捻艳,我是刑警寧澤,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布试和,位于F島的核電站讯泣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阅悍。R本人自食惡果不足惜好渠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一昨稼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拳锚,春花似錦假栓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至杆烁,卻和暖如春牙丽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兔魂。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工烤芦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人析校。 一個(gè)月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓构罗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親智玻。 傳聞我的和親對象是個(gè)殘疾皇子遂唧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評論 2 350

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