成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript繼承總結(jié)

jas0n / 2673人閱讀

摘要:創(chuàng)建對(duì)象字面量對(duì)象構(gòu)造函數(shù)字面量字面量構(gòu)造函數(shù)繼承原型鏈繼承在睡覺(jué)正在吃就是把實(shí)例賦值給,也就是說(shuō)。構(gòu)造函數(shù)繼承在睡覺(jué)正在吃構(gòu)造函數(shù)繼承可以通過(guò)或方法實(shí)現(xiàn)繼承。

1.創(chuàng)建對(duì)象

1.字面量對(duì)象
2.構(gòu)造函數(shù)
3.Object.create

//1.字面量
var obj={
    name: "字面量",
    show: function(){
        console.log(this.name)
    }
}
//2.構(gòu)造函數(shù)
function fun (name) {
    this.name=name
}
var obj=new fun("obj")
//3.Object.create
var obj={name: "obj"}
var obj=Object.create(obj)
2.JavaScript繼承 1.原型鏈繼承
function Parent(name){
    this.name=name
    this.sleep=function(){
        console.log(this.name + "在睡覺(jué)")
    }
}
Parent.prototype.eat=function(food){
    console.log(this.name + "正在吃" + food)
}
function Child(){}
Child.prototype=new Parent("Child")
Child.prototype.constructor=Child
var child=new Child()

Child.prototype=new Parent("Child")就是把Parent實(shí)例賦值給Child.prototype,也就是說(shuō)new Child().__proto__===new Parent("Child")。

可以通過(guò)Child.prototype在原型對(duì)象上增加新的屬性或方法,也可以通過(guò),child.__proto__在原型對(duì)象上添加新的方法和屬性。

缺點(diǎn):
1.原型對(duì)象上的屬性和方法是所有實(shí)例都可訪問(wèn)的,而且一個(gè)實(shí)例改變了原型上的方法和屬性都會(huì)影響到其他實(shí)例。
2.創(chuàng)建子類(lèi)實(shí)例時(shí),無(wú)法向父類(lèi)構(gòu)造函數(shù)傳參。

2.構(gòu)造函數(shù)繼承
function Parent(name){
    this.name=name
    this.sleep=function(){    
        console.log(this.name + "在睡覺(jué)")
    }
}
Parent.prototype.eat=function(food){
    console.log(this.name + "正在吃" + food)
}

function Child(){
    Parent.call(this,"child")
}
Child.prototype.eyes=function(){console.log("eyes")}
var child=new Child()

構(gòu)造函數(shù)繼承可以通過(guò)call或apply方法實(shí)現(xiàn)繼承。這種方法不能繼承原型對(duì)象中的屬性和方法,只能繼承實(shí)例屬性和實(shí)例方法,但是可以向父類(lèi)傳參。

3.組合繼承
function Parent(name){
    this.name=name
    this.sleep=function(){    
        console.log(this.name + "正在睡覺(jué)")
    }
}
Parent.prototype.eat=function(food){
    console.log(this.name + "正在吃" + food)
}
function Child(){
    Parent.call(this,"child")
}
Child.prototype.eyes=function(){console.log("eyes")}

Child.prototype=new Parent()
Child.prototype.constructor=Child 
var child=new Child()

組合繼承是比較好的繼承, 他是原型鏈繼承和構(gòu)造函數(shù)繼承的結(jié)合, 合理的利用了這兩種組合的特點(diǎn),既是子類(lèi)的實(shí)例,也是父類(lèi)的實(shí)例, 但有一個(gè)缺點(diǎn)就是調(diào)用了兩次構(gòu)造函數(shù)。

4.組合繼承優(yōu)化
function Parent(name){
    this.name=name
    this.sleep=function(){    
        console.log(this.name + "正在睡覺(jué)")
    }
}
Parent.prototype.eat=function(food){
    console.log(this.name + "正在吃" + food)
}
function Child(){
    Parent.call(this,"child")
}
Child.prototype = Object.create(Parent.prototype)
Child.prototype.constructor=Child 
var child=new Child()
5.寄生組合繼承
function Parent(name){
    this.name=name
    this.sleep=function(){    
        console.log(this.name + "正在睡覺(jué)")
    }
}
Parent.prototype.eat=function(food){
    console.log(this.name + "正在吃" + food)
}
function Child(){
    Parent.call(this,"child")
}
function f(){}
f.prototype=Parent.prototype
Child.prototype=new f()
Child.prototype.constructor=Child 
var child=new Child()

只調(diào)用一次父類(lèi)的構(gòu)造函數(shù),避免了在子類(lèi)原型上創(chuàng)建不必要的,多余的屬性。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/97297.html

相關(guān)文章

  • [原創(chuàng)] JavaScript中的繼承總結(jié)

    摘要:中繼承比較復(fù)雜,坑比較多,最近有點(diǎn)時(shí)間整理下,記錄下來(lái)。的繼承實(shí)現(xiàn)方式大概分類(lèi)如下的兩大類(lèi),每一種實(shí)現(xiàn)都有自己的有點(diǎn)和缺點(diǎn),根據(jù)場(chǎng)景選擇吧通過(guò)修改原型鏈來(lái)來(lái)實(shí)現(xiàn)繼承通過(guò)復(fù)制父類(lèi)來(lái)來(lái)實(shí)現(xiàn)繼承為了理解繼承的原型鏈的變化,我畫(huà)了原型鏈圖。 JS 中繼承比較復(fù)雜,坑比較多,最近有點(diǎn)時(shí)間整理下,記錄下來(lái)。 JS 的繼承實(shí)現(xiàn)方式大概分類(lèi)如下的兩大類(lèi),每一種實(shí)現(xiàn)都有自己的有點(diǎn)和缺點(diǎn),根據(jù)場(chǎng)景選擇吧 ...

    sixgo 評(píng)論0 收藏0
  • javascript原型(容易犯糊涂點(diǎn)的總結(jié)

    摘要:犯渾的地方中的原型繼承幾乎是面試必問(wèn)點(diǎn),然而真正透徹的理解它還是需要費(fèi)一番功夫的,等等看到腦子就昏掉了,有時(shí)候以為自己掌握了,但是沒(méi)過(guò)多久看到角度不同的講解時(shí)就又犯糊涂了犯渾點(diǎn)中的構(gòu)造函數(shù),實(shí)例與原型之間的關(guān)系。 在javascirpt中,每個(gè)對(duì)象都有一個(gè)指向它的原型對(duì)象的內(nèi)部鏈接,這個(gè)原型對(duì)象又有自己的原型,一級(jí)一級(jí)鏈接上去,直到某個(gè)對(duì)象的原型為null,從而實(shí)現(xiàn)了繼承。 犯渾的地方...

    dongfangyiyu 評(píng)論0 收藏0
  • JavaScript」js中的繼承方法總結(jié)

    摘要:缺點(diǎn)方法都在構(gòu)造函數(shù)中定義,每次創(chuàng)建實(shí)例都會(huì)創(chuàng)建一遍方法組合繼承組合繼承融合原型鏈繼承和構(gòu)造函數(shù)的優(yōu)點(diǎn),是中最常用的繼承模式然而組合繼承也有一個(gè)缺點(diǎn),就是會(huì)調(diào)用兩次父構(gòu)造函數(shù)。 1.前言 本文完整代碼指路我的GitHub,歡迎star。js中的繼承方式有很多種,以下僅列出部分。 2.原型鏈繼承 代碼如下: function Parent() { this.name = jche...

    Cristic 評(píng)論0 收藏0
  • 基于原型的JavaScript繼承 - 面向?qū)ο蟮?em>JavaScript - JavaScript核心

    摘要:基于原型的繼承誠(chéng)惶誠(chéng)恐的寫(xiě)下這篇文章。無(wú)論是還是,都是面向?qū)ο蟮?。將這個(gè)新對(duì)象作為構(gòu)造函數(shù)的執(zhí)行上下文其指向這個(gè)對(duì)象,并執(zhí)行構(gòu)造函數(shù)返回這個(gè)對(duì)象原型繼承我們來(lái)定義一個(gè)簡(jiǎn)單的類(lèi)和它的原型我們?cè)谠蜕隙x了一個(gè)方法。 源碼: https://github.com/RobinQu/Programing-In-Javascript/blob/master/chapters/JavaScr...

    Acceml 評(píng)論0 收藏0
  • 基礎(chǔ)二:javascript面向?qū)ο?、?chuàng)建對(duì)象、原型和繼承總結(jié)(下)

    摘要:當(dāng)調(diào)用的構(gòu)造函數(shù)時(shí),在函數(shù)內(nèi)部又會(huì)調(diào)用的構(gòu)造函數(shù),又在新對(duì)象上創(chuàng)建了實(shí)例屬性和,于是這兩個(gè)屬性就屏蔽了原型中的同名屬性。 前言:這次對(duì)上篇收個(gè)尾,主要總結(jié)一下javascript的繼承。 1.原型鏈 js中原型鏈?zhǔn)菍?shí)現(xiàn)繼承的主要方法。基本思想是:利用原型讓一個(gè)引用類(lèi)型繼承另一個(gè)引用類(lèi)型的屬性和方法。我們來(lái)簡(jiǎn)單回顧一下以前的內(nèi)容: 每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象 每個(gè)原型對(duì)象都包含一個(gè)指...

    617035918 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<