国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript的對象與繼承

jone5679 / 998人閱讀

摘要:的構(gòu)造函數(shù)是什么它是一個普通的函數(shù)它內(nèi)部用了關(guān)鍵字它有一個屬性,這個是一個對象當然,其實每一個函數(shù)都有屬性這個上面是可以被繼承的屬性可被繼承的屬性以上是一個從原型對象生成實例對象的例子。

1: JavaScript的構(gòu)造函數(shù)是什么?
1: 它是一個普通的函數(shù)
2: 它內(nèi)部用了this關(guān)鍵字
3: 它有一個prototype屬性,這個prototype是一個對象(當然,其實每一個函數(shù)都有prototype屬性)
4: 這個prototype上面是可以被繼承的屬性

function Apple(price, colour){
    this.price = price;
    this.colour = colour;
}
Apple.prototype.type = "fruit"; //可被繼承的屬性

var appleRed = new Apple(10, "red");
var appleGreen = new Apple(20, "green");

appleRed.colour;//red
appleGreen.colour;//green
appleRed.type; //fruit
appleGreen.type;//fruit

以上是一個從原型對象(Apple)生成實例對象(appleGreen, appleRed)的例子。接下來看看基于構(gòu)造函數(shù)繼承:
首先假設有兩個構(gòu)造函數(shù):

function Fruit(){
    this.taste = "sweet";
}

function Apple(color){
    this.color = "red"
}

我們希望Apple能繼承Fruit,怎么做?總共有5種繼承方法:
1: 構(gòu)造函數(shù)綁定
在子構(gòu)造函數(shù)中,在父構(gòu)造器身上調(diào)用call或者apply方法

function Fruit(){
    this.taste = "sweet";
}

function Apple(color){
    Fruit.apply(this, arguments);
    this.color = "red"
}

var appleRed = new Apple("red");
appleRed.taste;// "sweet"

2: prototype賦值
實例化一個父對象,然后把它賦給子構(gòu)造函數(shù)的prototype屬性

function Fruit(){
    this.taste = "sweet";
}

function Apple(color){
    this.color = "red"
}

Apple.prototype = new Fruit();
Apple.prototype.constructor = Apple;//特別注意這一行

var appleRed = new Apple("red");
appleRed.taste;//"sweet"
appleRed.constructor === Apple;//true

每一個實例都有一個constructor,繼承自構(gòu)造函數(shù)的prototype的constructor屬性。在執(zhí)行了

Apple.prototype = new Fruit();

之后,相當于是把Apple的prototype這個對象整個覆蓋了,這個時候 Apple.prototype.constructor是Fruit這個方法。這樣子就意味這appleRed.constructor也是Fruit,這樣繼承就混亂了,因為appleRed明明是由Apple這個構(gòu)造方法實例化出來的。所以我們要把Apple正確的constructor重新設置回去:

Apple.prototype.constructor = Apple;

3: 把父構(gòu)造函數(shù)的prototype直接賦給子構(gòu)造函數(shù)的prototype

function Fruit(){}
Fruit.prototype.taste = "sweet";

function Apple(color){
    this.color = "red"
}

Apple.prototype = Fruit.prototype;
Apple.prototype.constructor = Apple;

var appleRed = new Apple("red");
appleRed.taste;//"sweet"
Fruit.prototype.constructor === Apple;//true

雖然實現(xiàn)了繼承,但是現(xiàn)在Apple和Fruit的prototype指向了同一段內(nèi)存,任何對Apple.prototype的修改都會影響到Fruit.prototype,所以代碼最后一行的這種結(jié)果,是我們不愿意看到的。
4: 利用一個空的中介構(gòu)造函數(shù)
其實第四種是第二種和第三種的結(jié)合

function Fruit(){}
Fruit.prototype.taste = "sweet";

function Apple(color){
    this.color = "red"
}

var F = function(){};
F.prototype = Fruit.prototype;
Apple.prototype = new F();
Apple.prototype.constructor = Apple;

var appleRed = new Apple("red");
appleRed.taste;//"sweet"
appleRed.constructor === Apple;//true

1: 中介構(gòu)造函數(shù)的prototype=父構(gòu)造函數(shù)的prototype;
2: 子構(gòu)造函數(shù)的prototype=中介構(gòu)造函數(shù)的一個實例;
3: 把子構(gòu)造函數(shù)的constructor復原為自己
5: copy繼承
就是把父構(gòu)造函數(shù)的prototype上的所有屬性和方法拷貝進子構(gòu)造方法。

function Fruit(){}
Fruit.prototype.taste = "sweet";

function Apple(color){
    this.color = "red"
}

function extend(child, parent){
    var c = child.prototype;
    var p = parent.prototype;
    for(var i in p){
        c[i] = p[i]
    }
}
extend(Apple, Fruit);//調(diào)用繼承方法
var appleRed = new Apple("red");
appleRed.taste;//"sweet"

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/83521.html

相關(guān)文章

  • 理解JavaScript核心知識點:原型

    摘要:首先,需要來理清一些基礎的計算機編程概念編程哲學與設計模式計算機編程理念源自于對現(xiàn)實抽象的哲學思考,面向?qū)ο缶幊淌瞧湟环N思維方式,與它并駕齊驅(qū)的是另外兩種思路過程式和函數(shù)式編程。 JavaScript 中的原型機制一直以來都被眾多開發(fā)者(包括本人)低估甚至忽視了,這是因為絕大多數(shù)人沒有想要深刻理解這個機制的內(nèi)涵,以及越來越多的開發(fā)者缺乏計算機編程相關(guān)的基礎知識。對于這樣的開發(fā)者來說 J...

    iKcamp 評論0 收藏0
  • 徹底搞懂JavaScript繼承

    摘要:這正是我們想要的太棒了毫不意外的,這種繼承的方式被稱為構(gòu)造函數(shù)繼承,在中是一種關(guān)鍵的實現(xiàn)的繼承方法,相信你已經(jīng)很好的掌握了。 你應該知道,JavaScript是一門基于原型鏈的語言,而我們今天的主題 -- 繼承就和原型鏈這一概念息息相關(guān)。甚至可以說,所謂的原型鏈就是一條繼承鏈。有些困惑了嗎?接著看下去吧。 一、構(gòu)造函數(shù),原型屬性與實例對象 要搞清楚如何在JavaScript中實現(xiàn)繼承,...

    _ivan 評論0 收藏0
  • 繼承原型

    摘要:既然構(gòu)造函數(shù)有屬于自己的原型對象,那么我們應該能讓另一個構(gòu)造函數(shù)來繼承他的原型對象咯我們在構(gòu)造函數(shù)內(nèi)部執(zhí)行了函數(shù)并改變了函數(shù)內(nèi)部的指向其實這個指向的是實例化之后的對象。 我們在討(mian)論(shi)JavaScript這門語言時,總是繞不過的一個話題就是繼承與原型鏈。那么繼承與原型鏈到底是什么呢? 我很喜歡的一個聊天模式是:我不能說XX是什么,我只能說XX像什么。也就是說我不直接跟...

    My_Oh_My 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    李昌杰 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    Lyux 評論0 收藏0
  • SegmentFault 技術(shù)周刊 Vol.32 - 七夕將至,你對象”還好嗎?

    摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...

    AaronYuan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<