構造函數(shù)的繼承

繼承的方法有很多挎狸,有的存在明顯缺點扣汪,我選擇了以下三種方法來記憶并使用。

1.使用prototype锨匆,并利用空對象作為中介

(摘自avascript面向對象編程(二):構造函數(shù)的繼承)

由于"直接繼承prototype"存在缺點崭别,所以就有第四種方法,利用一個空對象作為中介恐锣。

  var F = function(){};
  F.prototype = Animal.prototype;
  Cat.prototype = new F();
  Cat.prototype.constructor = Cat;

F是空對象茅主,所以幾乎不占內(nèi)存。這時土榴,修改Cat的prototype對象诀姚,就不會影響到Animal的prototype對象。
alert(Animal.prototype.constructor); // Animal
我們將上面的方法鞭衩,封裝成一個函數(shù)学搜,便于使用。

  function extend(Child, Parent) {

    var F = function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    Child.prototype.constructor = Child;
    Child.uber = Parent.prototype;
  }

使用的時候论衍,方法如下

  extend(Cat,Animal);
  var cat1 = new Cat("大毛","黃色");
  alert(cat1.species); // 動物

這個extend函數(shù)瑞佩,就是YUI庫如何實現(xiàn)繼承的方法。
另外坯台,說明一點炬丸,函數(shù)體最后一行
Child.uber = Parent.prototype;
意思是為子對象設一個uber屬性,這個屬性直接指向父對象的prototype屬性蜒蕾。(uber是一個德語詞稠炬,意思是"向上"、"上一層"咪啡。)這等于在子對象上打開一條通道首启,可以直接調(diào)用父對象的方法。這一行放在這里撤摸,只是為了實現(xiàn)繼承的完備性毅桃,純屬備用性質(zhì)褒纲。

2.拷貝繼承

(摘自avascript面向對象編程(二):構造函數(shù)的繼承)
上面是采用prototype對象,實現(xiàn)繼承钥飞。我們也可以換一種思路莺掠,純粹采用"拷貝"方法實現(xiàn)繼承。簡單說读宙,如果把父對象的所有屬性和方法彻秆,拷貝進子對象,不也能夠實現(xiàn)繼承嗎结闸?這樣我們就有了第五種方法唇兑。
首先,還是把Animal的所有不變屬性膀估,都放到它的prototype對象上幔亥。

  function Animal(){}
  Animal.prototype.species = "動物";

然后,再寫一個函數(shù)察纯,實現(xiàn)屬性拷貝的目的帕棉。

  function extend2(Child, Parent) {
    var p = Parent.prototype;
    var c = Child.prototype;
    for (var i in p) {
      c[i] = p[i];
      }
    c.uber = p;
  }

這個函數(shù)的作用,就是將父對象的prototype對象中的屬性饼记,一一拷貝給Child對象的prototype對象香伴。
使用的時候,這樣寫:

  extend2(Cat, Animal);
  var cat1 = new Cat("大毛","黃色");
  alert(cat1.species); // 動物

3.Object.create

ES5中定義了該方法具则。使用它即纲,可以很簡單地完成繼承。

實例1

var Parent = {
    getName: function() {
        return this.name;
    }
}
 
var child = Object.create(Parent, {
    name: { value: "Benjamin"},
    url : { value: "http://www.zuojj.com"}
});
 
//Outputs: Object {name: "Benjamin", url: "http://www.zuojj.com", getName: function}
console.log(child);
 
//Outputs: Benjamin
console.log(child.getName());

實例2

var Parent = {
    getName: function() {
        return this.name;
    },
    getSex: function() {
        return this.sex;
    }
}
 
var Child = Object.create(Parent, {
    name: { value: "Benjamin"},
    url : { value: "http://www.zuojj.com"}
});
 
var SubChild = Object.create(Child, {
    name: {value: "zuojj"},
    sex : {value: "male"}
})
 
//Outputs: http://wwww.zuojj.com
console.log(SubChild.url);
 
//Outputs: zuojj
console.log(SubChild.getName());
 
//Outputs: undefined
console.log(Child.sex);
 
//Outputs: Benjamin
console.log(Child.getName());
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末博肋,一起剝皮案震驚了整個濱河市低斋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌匪凡,老刑警劉巖膊畴,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異病游,居然都是意外死亡唇跨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門衬衬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來买猖,“玉大人,你說我怎么就攤上這事滋尉∮窨兀” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵狮惜,是天一觀的道長奸远。 經(jīng)常有香客問我既棺,道長讽挟,這世上最難降的妖魔是什么懒叛? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮耽梅,結果婚禮上薛窥,老公的妹妹穿的比我還像新娘。我一直安慰自己眼姐,他們只是感情好诅迷,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著众旗,像睡著了一般罢杉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贡歧,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天滩租,我揣著相機與錄音,去河邊找鬼利朵。 笑死律想,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绍弟。 我是一名探鬼主播技即,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼樟遣!你這毒婦竟也來了而叼?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤豹悬,失蹤者是張志新(化名)和其女友劉穎葵陵,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屿衅,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡埃难,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涤久。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涡尘。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖响迂,靈堂內(nèi)的尸體忽然破棺而出考抄,到底是詐尸還是另有隱情,我是刑警寧澤蔗彤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布川梅,位于F島的核電站疯兼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏贫途。R本人自食惡果不足惜吧彪,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丢早。 院中可真熱鬧姨裸,春花似錦、人聲如沸怨酝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽农猬。三九已至赡艰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斤葱,已是汗流浹背慷垮。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苦掘,地道東北人换帜。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像鹤啡,于是被迫代替她去往敵國和親惯驼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

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