摘要:概括創(chuàng)建自定義類型的最常見方式,就是組合使用構造函數(shù)模式與原型模式。應用方式一分開定義,用來理解構造函數(shù)與原型方式二動態(tài)原型模式定義,避免獨立的構造函數(shù)和原型,更完美的定義形式。
概括:創(chuàng)建自定義類型的最常見方式,就是組合使用構造函數(shù)模式與原型模式。
好處:通過這種方式,不僅每個實例都有自己的一份實例屬性的副本,而且同時又共享著對方法的引用,最大限度的節(jié)省了內存。而且這種混合模式還支持向構造函數(shù)傳遞參數(shù),可謂是集兩種模式之長。
定義形式:有兩種定義方式,方式-:分開定義(這樣更好理解構造函數(shù)和原型),方式二:動態(tài)定義(把所有信息都封裝在了構造函數(shù)中,通過在構造函數(shù)中初始化原型,又保持了同時使用構造函數(shù)和原型的有點,換句話說,可以通過檢查某個應該存在的方法是否有效,來決定是否需要初始化原型)。
應用:
方式一:分開定義,用來理解構造函數(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)原型模式定義,避免獨立的構造函數(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()方法不存在的情況下,才會將它添加到原型中。這段代碼只會在初次調用構造函數(shù)時才會執(zhí)行,此后,原型已經完成初始化,不需要在做什么修改了。不過如果修改,會立即在所有實例中得到反映。
調用:
因為sayName()方法是原型方法,所以是Person實例的所有共享方法,而構造函數(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 }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85722.html
摘要:目錄導語理解對象和面向對象的程序設計創(chuàng)建對象的方式的繼承機制原型對象原型鏈與原型對象相關的方法小結導語前面的系列文章,基本把的核心知識點的基本語法標準庫等章節(jié)講解完本章開始進入核心知識點的高級部分面向對象的程序設計,這一部分的內容將會對對象 目錄 導語 1.理解對象和面向對象的程序設計 2.創(chuàng)建對象的方式 3.JavaScript的繼承機制 3.1 原型對象 3.2 原型鏈 3.3 與...
摘要:基本概念面向對象編程是用抽象方式創(chuàng)建基于現(xiàn)實世界模型的一種編程模式。使用面向對象編程是為了促進更好的靈活性和可維護性。面向對象與面向過程比較,面向過程更注重過程。 1:基本概念 面向對象編程是用抽象方式創(chuàng)建基于現(xiàn)實世界模型的一種編程模式。 這句話的意思是:每個對象能夠接受信息,處理數(shù)據和發(fā)送消息給其他對象;這就意味著在這個編程模式下,每一個對象都是一個獨立的個體,它可以接收,可以處理,...
摘要:組合構造函數(shù)原型模式解決構造傳參和共享問題,可以組合構造函數(shù)原型模式不共享的使用構造函數(shù)共享的使用原型模式強制指向這種模式也是最常見也是最常用的模式,這種混合模式很好的解決了傳參和引用共享的大難題。 寫在前面: 之前的文章都是寫構造函數(shù),原型之類的。但是我們都知道原型最大的優(yōu)點也是缺點就是共享。也是我們最頭疼的問題.據共享的緣故,導致很多開發(fā)者放棄使用原型,因為每次實例化出的數(shù)據需要保...
摘要:不必在構造函數(shù)中定義對象實例的信息。其次,按照一切事物皆對象的這餓極本的面向對象的法則來說,類本身并不是一個對象,然而原型方式的構造函數(shù)和原型本身也是個對象。第二個問題就是在創(chuàng)建子類型的實例時,不能向超類型的構造函數(shù)中傳遞參數(shù)。 前言 對象(Object)應該算是js中最為重要的部分,也是js中非常難懂晦澀的一部分。更是面試以及框架設計中各出沒。寫這篇文章,主要參考與JavaScrip...
摘要:一面向對象概念面向對象就是使用對象。因此在構造函數(shù)中表示剛剛創(chuàng)建出來的對象。在構造函數(shù)中利用對象的動態(tài)特性為其對象添加成員。 一、面向對象 1.1 概念 面向對象就是使用對象。面向對象開發(fā)就是使用對象開發(fā)。 面向過程就是用過程的方式進行開發(fā)。面向對象是對面向過程的封裝。 1.2 三大特性 抽象性所謂的抽象性就是:如果需要一個對象描述數(shù)據,需要抽取這個對象的核心數(shù)據 提出需要的核心...
閱讀 2651·2019-08-30 15:53
閱讀 2876·2019-08-29 16:20
閱讀 1084·2019-08-29 15:10
閱讀 1022·2019-08-26 10:58
閱讀 2195·2019-08-26 10:49
閱讀 633·2019-08-26 10:21
閱讀 705·2019-08-23 18:30
閱讀 1638·2019-08-23 15:58