【二十六】面向?qū)ο缶幊?/h1>

JavaScript的所有數(shù)據(jù)都可以看成對象,那是不是我們已經(jīng)在使用面向?qū)ο缶幊塘四兀?br> 當然不是吼肥。如果我們只使用Number乌叶、Array、string以及基本的{...}定義的對象讯私,還無法發(fā)揮出面向?qū)ο缶幊痰耐Α?br> JavaScript的面向?qū)ο缶幊毯痛蠖鄶?shù)其他語言如Java热押、C#的面向?qū)ο缶幊潭疾惶粯印H绻闶煜ava或C#斤寇,很好桶癣,你一定明白面向?qū)ο蟮膬蓚€基本概念:

  1. 類: 類是對象的類型模板,例如娘锁,定義Student類來表示學生牙寞,類本身是一種類型,Student表示學生類型莫秆,但不表示任何具體的某個學生间雀;
  2. 實例:實例是根據(jù)類創(chuàng)建的對象,例如镊屎,根據(jù)Student類可以創(chuàng)建出xiaoming惹挟、xiaohong、xiaojun等多個實例杯道,每個實例表示一個具體的學生匪煌,他們?nèi)紝儆赟tudent類型。

所以党巾,類和實例是大多數(shù)面向?qū)ο缶幊陶Z言的基本概念萎庭。
不過,在JavaScript中齿拂,這個概念需要改一改驳规,JavaScript不區(qū)分類和實例的概念,而是通過原型(prototype)來實現(xiàn)面向?qū)ο缶幊獭?br> 原型是指當我們想要創(chuàng)建xiaoming這個具體的學生時署海,我們并沒有一個Student類型可用吗购。那怎么辦医男?恰好有這么一個現(xiàn)成的對象:

var robot = {
    name: 'Robot', 
    height: 1.6,
    run: function () {
        console.log(this.name + ' is running...');
    }
};

我們來看看robot對象有名字,有身高捻勉,還會跑镀梭,有點像小明,干脆就根據(jù)它來“創(chuàng)建”小明得了踱启!
于是我們把它改名為Student报账,然后創(chuàng)建出xiaoming:

var Student = {
    name: 'Robot',
    height: 1.2,
    run: function() {
        console.log(this.name + ' is running...');
    }
};
 var xiaoming = {
    name: '小明'
};

xiaoming_proto_= Student;

注意最后一行代碼是把xiaoming的原型指向了對象Student,看上去xiaoming仿佛是從Student繼承下來的:

xiaoming.name;  // '小明'
xiaoming.run();  // 小明 is running...

xiaoming有自己的name屬性埠偿,但并沒有定義run()方法透罢。不過,由于小明是從Student繼承而來冠蒋,只要Student有run()方法羽圃,xiaoming也可以調(diào)用:



JavaScript的原型鏈和Java的Class區(qū)別就在,它沒有"Class"的概念抖剿,所有對象都是實例朽寞,所謂繼承關(guān)系不過是把一個對象的原型指向另一個對象而已。
如果你把xiaoming的原型指向其他對象:

var Bird = {
    fly: function () {
        console.log(this.name + 'is flying...');
    }
};

xiaoming.__proto__ = Bird;

現(xiàn)在xiaoming已經(jīng)無法run()了牙躺,他已經(jīng)變成了一只鳥:

xiaoming.fly();  // 小明 is flying...

在JavaScript代碼運行時期愁憔,你可以把xiaoming從Student變成Bird,或者變成任何對象腕扶。
<u>請注意</u>孽拷,上述代碼僅用于演示目的。在編寫JavaScript代碼時半抱,不要直接用obj.proto去改變一個對象的原型脓恕,并且,低版本的IE也無法使用proto 窿侈。Object.create()方法可以傳入一個原型對象,并創(chuàng)建一個基于該原型的新對象史简。但是新對象什么屬性都沒有乃秀,因此圆兵,我們可以編寫一個函數(shù)來創(chuàng)建xiaoming :

// 原型對象:
var Student = {
    name: 'Robot',
    height: 1.2,
    fun: function() {
        console.log(this.name + 'is running...');
    }
};

function createStudent(name) {
    // 基于Student原型創(chuàng)建一個新對象:
    var s = Object.create(Student);
    // 初始化新對象:
    s.name = name;
    return s;
}

var xiaoming = createStudent('小明');
xiaoming.run();  // 小明 is running...
xiaoming.__proto__ === Student; // true

這是創(chuàng)建原型繼承的一種方法,JavaScript還有其它方法來創(chuàng)建對象殉农,我們在后面會一一講到刀脏。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市超凳,隨后出現(xiàn)的幾起案子愈污,更是在濱河造成了極大的恐慌耀态,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件暂雹,死亡現(xiàn)場離奇詭異首装,居然都是意外死亡,警方通過查閱死者的電腦和手機杭跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門簿盅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人揍魂,你說我怎么就攤上這事桨醋。” “怎么了现斋?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵喜最,是天一觀的道長。 經(jīng)常有香客問我庄蹋,道長瞬内,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任限书,我火速辦了婚禮虫蝶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘倦西。我一直安慰自己能真,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布扰柠。 她就那樣靜靜地躺著粉铐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卤档。 梳的紋絲不亂的頭發(fā)上蝙泼,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音劝枣,去河邊找鬼汤踏。 笑死,一個胖子當著我的面吹牛舔腾,可吹牛的內(nèi)容都是我干的溪胶。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼琢唾,長吁一口氣:“原來是場噩夢啊……” “哼载荔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起采桃,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤懒熙,失蹤者是張志新(化名)和其女友劉穎丘损,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體工扎,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡徘钥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年肢娘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片而钞。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡拘荡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出网缝,到底是詐尸還是另有隱情蟋定,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布驶兜,位于F島的核電站,受9級特大地震影響犀盟,放射性物質(zhì)發(fā)生泄漏蝇狼。R本人自食惡果不足惜倡怎,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望颤专。 院中可真熱鬧钠乏,春花似錦、人聲如沸簇捍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至事格,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間远搪,已是汗流浹背逢捺。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒸甜,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓窍荧,卻偏偏與公主長得像蕊退,于是被迫代替她去往敵國和親憔恳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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