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

資訊專欄INFORMATION COLUMN

淺談原型式繼承、借助構(gòu)造函數(shù)、組合方式繼承

wangjuntytl / 1338人閱讀

摘要:想要解決這樣的問題的話,可以借助構(gòu)造函數(shù)也可以叫做偽造對(duì)象或經(jīng)典繼承。這種方式實(shí)現(xiàn)非常簡(jiǎn)單,就是在子對(duì)象的構(gòu)造函數(shù)中調(diào)用父對(duì)象的構(gòu)造函數(shù)。

原型式繼承

原型式繼承,就是一定一個(gè)函數(shù),該函數(shù)中創(chuàng)建一個(gè)臨時(shí)性的構(gòu)造函數(shù),將作為參數(shù),傳入的對(duì)象作為這個(gè)構(gòu)造函數(shù)的原型,最后返回這個(gè)構(gòu)造函數(shù)的實(shí)例對(duì)象

/*定義函數(shù):用于實(shí)現(xiàn)對(duì)象之間的繼承
    參數(shù):
    obj:表示繼承關(guān)系中的父級(jí)對(duì)象
    prop:對(duì)象格式,表示繼承關(guān)系中的子級(jí)對(duì)象的屬性和方法
*/
function fn(obj,porp){
    //定義一個(gè)臨時(shí)的構(gòu)造函數(shù)
    function Fun(){
       //遍歷對(duì)象的屬性和方法
       for(var attrName in porp){
           this[attrName]=porp[attrName];
       }
    }
    //將函數(shù)的參數(shù)作為構(gòu)造函數(shù)的原型
    Fun.prototype=obj;
    //將構(gòu)造函數(shù)創(chuàng)建的對(duì)象進(jìn)行返回
    return new Fun();
}
var obj={
    name:"前端"
}
//調(diào)用函數(shù)
var result=fn(obj,{
    age:20,
    sayMe:function(){
        console.log("this is function");
    }
});
console.log(result.age);
result.sayMe();

利用Object.create()方法實(shí)現(xiàn)繼承

var obj={
    name:"前端"
}
var newObj=object.create(obj,{
    age:{
        value:20
    },
    sayMe:{
        value:function(){
            console.log("this is function");
        }
    }
});
console.log(newObj.age);
newObj.sayMe();
借助構(gòu)造函數(shù)

無(wú)論是原型鏈還是原型式繼承,都具有相同的問題。想要解決這樣的問題的話,可以借助構(gòu)造函數(shù)(也可以叫做偽造對(duì)象或經(jīng)典繼承)。
這種方式實(shí)現(xiàn)非常簡(jiǎn)單,就是在子對(duì)象的構(gòu)造函數(shù)中調(diào)用父對(duì)象的構(gòu)造函數(shù)。具體可以通過調(diào)用apply()和call()方法實(shí)現(xiàn)。
apply()和call()方法都允許傳遞指定某個(gè)對(duì)象的this。對(duì)于繼承來(lái)講,可以實(shí)現(xiàn)在子對(duì)象的構(gòu)造函數(shù)中調(diào)用父對(duì)象的構(gòu)造函數(shù)時(shí),將子對(duì)象的this和父對(duì)象的this綁定在一起

//定義父級(jí)對(duì)象的構(gòu)造函數(shù)
function Parent(){
    this.parent="parent";
}

//定義子級(jí)對(duì)象的構(gòu)造函數(shù)
function child(){
    //調(diào)用父級(jí)對(duì)象的構(gòu)造函數(shù):使用apply()或call()方法
    Parent.call(this);
    
    this.child="child";
}
//創(chuàng)建子級(jí)對(duì)象
var child=new Child();
console.log(child);
組合方式繼承

組合繼承,也叫做偽經(jīng)典繼承,指的是將原型鏈或原型式繼承和借助構(gòu)造函數(shù)的技術(shù)組合在一起,發(fā)揮二者長(zhǎng)處的一種繼承方式
具體實(shí)現(xiàn)的思路就是:

使用原型鏈或原型式繼承實(shí)現(xiàn)對(duì)原型的屬性和方法的繼承。

通過借助構(gòu)造函數(shù)實(shí)現(xiàn)對(duì)實(shí)例對(duì)象的屬性的繼承

這樣,既通過在原型上定義方法實(shí)現(xiàn)了函數(shù)的重用,又可以保證每個(gè)對(duì)象都有自己的專有屬性

function Parent(){
    //構(gòu)造函數(shù)的自有屬性
    this.name="前端";
}
//構(gòu)造函數(shù)的原型屬性
Parent.prototype.age=20;

function Child(){
    //繼承父級(jí)構(gòu)造函數(shù)中的自有屬性
    Parent.call(this);
    
    this.job="IT";
}
//繼承父級(jí)構(gòu)造函數(shù)中的原型屬性
Child.prototype=Parent.prototype;

var child=new Child();

console.log(child.job);
console.log(child.age);
console.log(child.name);

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

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

相關(guān)文章

  • 淺談JavaScript繼承

    摘要:組合方式實(shí)現(xiàn)繼承原型鏈構(gòu)造函數(shù)喵喵喵汪汪汪與的唯一區(qū)別是多了這一句組合方式實(shí)現(xiàn)了對(duì)構(gòu)造函數(shù)內(nèi)和原型上所有屬性和方法的繼承,并且的實(shí)例對(duì)象之間也不會(huì)相互干擾。 前言 關(guān)于JavaScript繼承相關(guān)的定義和方法網(wǎng)上已經(jīng)有很多解釋啦,本菜鳥就不抄抄寫寫惹人嫌了,本文主要探討三種基本的繼承方式并且給出優(yōu)化方案。 正文 借助構(gòu)造函數(shù)實(shí)現(xiàn)繼承 function Parent1() { ...

    Jingbin_ 評(píng)論0 收藏0
  • 淺談JavaScript的面向?qū)ο蠛退姆庋b、繼承、多態(tài)

    摘要:會(huì)造成內(nèi)存浪費(fèi)的問題構(gòu)造函數(shù)繼承聲明父類聲明子類生成實(shí)例組合式繼承組合式繼承是汲取了兩者的優(yōu)點(diǎn),既避免了內(nèi)存浪費(fèi),又使得每個(gè)實(shí)例化的子類互不影響。 寫在前面 既然是淺談,就不會(huì)從原理上深度分析,只是幫助我們更好地理解... 面向?qū)ο笈c面向過程 面向?qū)ο蠛兔嫦蜻^程是兩種不同的編程思想,剛開始接觸編程的時(shí)候,我們大都是從面向過程起步的,畢竟像我一樣,大家接觸的第一門計(jì)算機(jī)語(yǔ)言大概率都是C語(yǔ)...

    MAX_zuo 評(píng)論0 收藏0
  • JavaScript繼承詳解

    摘要:可以通過構(gòu)造函數(shù)和原型的方式模擬實(shí)現(xiàn)類的功能。原型式繼承與類式繼承類式繼承是在子類型構(gòu)造函數(shù)的內(nèi)部調(diào)用超類型的構(gòu)造函數(shù)。寄生式繼承這種繼承方式是把原型式工廠模式結(jié)合起來(lái),目的是為了封裝創(chuàng)建的過程。 js繼承的概念 js里常用的如下兩種繼承方式: 原型鏈繼承(對(duì)象間的繼承) 類式繼承(構(gòu)造函數(shù)間的繼承) 由于js不像java那樣是真正面向?qū)ο蟮恼Z(yǔ)言,js是基于對(duì)象的,它沒有類的概念。...

    Yangyang 評(píng)論0 收藏0
  • javascript-繼承

    摘要:化偽花貓偽,花,貓借助構(gòu)造函數(shù)無(wú)論是原型鏈還是原型式繼承,都有相同的問題。要解決這樣的問題,可以借助構(gòu)造函數(shù)也可以叫做偽造對(duì)象或經(jīng)典繼承。對(duì)于繼承來(lái)講,可以試想子對(duì)象的構(gòu)造函數(shù)中調(diào)用父對(duì)象的構(gòu)造函數(shù)時(shí),講子對(duì)象的和父對(duì)象的綁定在一起。 繼承 原型式繼承 所謂原型式繼承,就是定義一個(gè)函數(shù),該函數(shù)中創(chuàng)建一個(gè)臨時(shí)性的構(gòu)造函數(shù),并將作為參數(shù)傳入的對(duì)象作為這個(gè)構(gòu)造函數(shù)的原型,最后返回這個(gè)構(gòu)造函數(shù)...

    kohoh_ 評(píng)論0 收藏0
  • 淺談JavaScript面向?qū)ο?/b>

    摘要:不必在構(gòu)造函數(shù)中定義對(duì)象實(shí)例的信息。其次,按照一切事物皆對(duì)象的這餓極本的面向?qū)ο蟮姆▌t來(lái)說,類本身并不是一個(gè)對(duì)象,然而原型方式的構(gòu)造函數(shù)和原型本身也是個(gè)對(duì)象。第二個(gè)問題就是在創(chuàng)建子類型的實(shí)例時(shí),不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。 前言 對(duì)象(Object)應(yīng)該算是js中最為重要的部分,也是js中非常難懂晦澀的一部分。更是面試以及框架設(shè)計(jì)中各出沒。寫這篇文章,主要參考與JavaScrip...

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

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

0條評(píng)論

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