亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS對象編程的原型和構(gòu)造函數(shù)混合使用

Null / 1365人閱讀

摘要:概括創(chuàng)建自定義類型的最常見方式,就是組合使用構(gòu)造函數(shù)模式與原型模式。應(yīng)用方式一分開定義,用來理解構(gòu)造函數(shù)與原型方式二動態(tài)原型模式定義,避免獨(dú)立的構(gòu)造函數(shù)和原型,更完美的定義形式。

概括:創(chuàng)建自定義類型的最常見方式,就是組合使用構(gòu)造函數(shù)模式與原型模式。

好處:通過這種方式,不僅每個實(shí)例都有自己的一份實(shí)例屬性的副本,而且同時又共享著對方法的引用,最大限度的節(jié)省了內(nèi)存。而且這種混合模式還支持向構(gòu)造函數(shù)傳遞參數(shù),可謂是集兩種模式之長。

定義形式:有兩種定義方式,方式-:分開定義(這樣更好理解構(gòu)造函數(shù)和原型),方式二:動態(tài)定義(把所有信息都封裝在了構(gòu)造函數(shù)中,通過在構(gòu)造函數(shù)中初始化原型,又保持了同時使用構(gòu)造函數(shù)和原型的有點(diǎn),換句話說,可以通過檢查某個應(yīng)該存在的方法是否有效,來決定是否需要初始化原型)。

應(yīng)用:

  

方式一:分開定義,用來理解構(gòu)造函數(shù)與原型

function Person(name,age,job){
      this.name=name;    
      this.age=age;       
      this.job=job;       
      this.friends=["Sandy","Court"]; 
 }

Person.prototype={
      constructor:Person,     
      sayName:function(){
         alert(this.name);    
      }
 }
  

方式二:動態(tài)原型模式定義,避免獨(dú)立的構(gòu)造函數(shù)和原型,更完美的定義形式。

function Person(name,age,job){
      this.name=name;
      this.age=age;
      this.job=job;
      this.friends=["xiaohonghua","xiaohuanghua"];

      if(typeof this.sayName!="function"){

          Person.prototype.sayName=function(){
             alert(this.name);
          };
      }

}

這里的sayName()方法不存在的情況下,才會將它添加到原型中。這段代碼只會在初次調(diào)用構(gòu)造函數(shù)時才會執(zhí)行,此后,原型已經(jīng)完成初始化,不需要在做什么修改了。不過如果修改,會立即在所有實(shí)例中得到反映。

  

調(diào)用:
因?yàn)閟ayName()方法是原型方法,所以是Person實(shí)例的所有共享方法,而構(gòu)造函數(shù)中定義的各種屬性是各個實(shí)例的屬性,隨意更改,不影響其他實(shí)例。

function test(){
     var person1=new Person1("xiaohong",26,"Teacher");
     var person2=new Person1("xiaoming",27,"Soft Engineer");

     person1.friends.push("Van");
     alert(person1.friends);  //xiaohonghua,xiaohuanghua,Van
     alert(person2.friends);  //xiaohonghua,xiaohuanghua
     alert(person1.friends == person2.friends);  //false
     alert(person2.sayName == person2.sayName);  //true
     person1.sayName();       //xiaohong
}

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/85722.html

相關(guān)文章

  • JavaScript面向對象程序設(shè)計(jì)

    摘要:目錄導(dǎo)語理解對象和面向?qū)ο蟮某绦蛟O(shè)計(jì)創(chuàng)建對象的方式的繼承機(jī)制原型對象原型鏈與原型對象相關(guān)的方法小結(jié)導(dǎo)語前面的系列文章,基本把的核心知識點(diǎn)的基本語法標(biāo)準(zhǔn)庫等章節(jié)講解完本章開始進(jìn)入核心知識點(diǎn)的高級部分面向?qū)ο蟮某绦蛟O(shè)計(jì),這一部分的內(nèi)容將會對對象 目錄 導(dǎo)語 1.理解對象和面向?qū)ο蟮某绦蛟O(shè)計(jì) 2.創(chuàng)建對象的方式 3.JavaScript的繼承機(jī)制 3.1 原型對象 3.2 原型鏈 3.3 與...

    gitmilk 評論0 收藏0
  • JavaScript面向對象編程

    摘要:基本概念面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。使用面向?qū)ο缶幊淌菫榱舜龠M(jìn)更好的靈活性和可維護(hù)性。面向?qū)ο笈c面向過程比較,面向過程更注重過程。 1:基本概念 面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。 這句話的意思是:每個對象能夠接受信息,處理數(shù)據(jù)和發(fā)送消息給其他對象;這就意味著在這個編程模式下,每一個對象都是一個獨(dú)立的個體,它可以接收,可以處理,...

    Carbs 評論0 收藏0
  • Javascript面向對象編程 -- 設(shè)計(jì)模式

    摘要:組合構(gòu)造函數(shù)原型模式解決構(gòu)造傳參和共享問題,可以組合構(gòu)造函數(shù)原型模式不共享的使用構(gòu)造函數(shù)共享的使用原型模式強(qiáng)制指向這種模式也是最常見也是最常用的模式,這種混合模式很好的解決了傳參和引用共享的大難題。 寫在前面: 之前的文章都是寫構(gòu)造函數(shù),原型之類的。但是我們都知道原型最大的優(yōu)點(diǎn)也是缺點(diǎn)就是共享。也是我們最頭疼的問題.據(jù)共享的緣故,導(dǎo)致很多開發(fā)者放棄使用原型,因?yàn)槊看螌?shí)例化出的數(shù)據(jù)需要保...

    Cciradih 評論0 收藏0
  • 淺談JavaScript面向對象

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

    cyixlq 評論0 收藏0
  • JavaScript面向對象核心知識歸納

    摘要:一面向?qū)ο蟾拍蠲嫦驅(qū)ο缶褪鞘褂脤ο?。因此在?gòu)造函數(shù)中表示剛剛創(chuàng)建出來的對象。在構(gòu)造函數(shù)中利用對象的動態(tài)特性為其對象添加成員。 一、面向?qū)ο?1.1 概念 面向?qū)ο缶褪鞘褂脤ο蟆C嫦驅(qū)ο箝_發(fā)就是使用對象開發(fā)。 面向過程就是用過程的方式進(jìn)行開發(fā)。面向?qū)ο笫菍γ嫦蜻^程的封裝。 1.2 三大特性 抽象性所謂的抽象性就是:如果需要一個對象描述數(shù)據(jù),需要抽取這個對象的核心數(shù)據(jù) 提出需要的核心...

    TalkingData 評論0 收藏0

發(fā)表評論

0條評論

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