摘要:概括創(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
摘要:目錄導(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 與...
摘要:基本概念面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。使用面向?qū)ο缶幊淌菫榱舜龠M(jìn)更好的靈活性和可維護(hù)性。面向?qū)ο笈c面向過程比較,面向過程更注重過程。 1:基本概念 面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實(shí)世界模型的一種編程模式。 這句話的意思是:每個對象能夠接受信息,處理數(shù)據(jù)和發(fā)送消息給其他對象;這就意味著在這個編程模式下,每一個對象都是一個獨(dú)立的個體,它可以接收,可以處理,...
摘要:組合構(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ù)需要保...
摘要:不必在構(gòu)造函數(shù)中定義對象實(shí)例的信息。其次,按照一切事物皆對象的這餓極本的面向?qū)ο蟮姆▌t來說,類本身并不是一個對象,然而原型方式的構(gòu)造函數(shù)和原型本身也是個對象。第二個問題就是在創(chuàng)建子類型的實(shí)例時,不能向超類型的構(gòu)造函數(shù)中傳遞參數(shù)。 前言 對象(Object)應(yīng)該算是js中最為重要的部分,也是js中非常難懂晦澀的一部分。更是面試以及框架設(shè)計(jì)中各出沒。寫這篇文章,主要參考與JavaScrip...
摘要:一面向?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ù) 提出需要的核心...
閱讀 2794·2019-08-30 15:53
閱讀 2932·2019-08-29 16:20
閱讀 1135·2019-08-29 15:10
閱讀 1090·2019-08-26 10:58
閱讀 2252·2019-08-26 10:49
閱讀 694·2019-08-26 10:21
閱讀 769·2019-08-23 18:30
閱讀 1693·2019-08-23 15:58