詳解JavaScript中的構(gòu)造器Constructor模式
構(gòu)造器模式簡單描述(看圖):
構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。構(gòu)造器用于創(chuàng)建特定類型對象——準(zhǔn)備好對象以備使用,同時接收構(gòu)造器可以使用的參數(shù),以在第一次創(chuàng)建對象時,設(shè)置成員屬性和方法的值
1、創(chuàng)建對象
新對象創(chuàng)建的兩種方法
var newObject={}; var newObject=new object();//object 構(gòu)造器的簡潔記法
2、基本Constructor
Javascript不支持類的情況下對象與Constructor,通過new關(guān)鍵字實(shí)例化一個對象,代碼大概是這樣的
function Car(model,year,miles){ this.model=model; this.year=year; this.miles=miles; this.toString=function() { return this.model+"has done"+this.miles+"miles"; }; }; //用法 //可以創(chuàng)建car新實(shí)例 var civic=new Car("Hona Civic",2009,2000); var mondeo=new Car("Ford Mondeo",2010,5000); console.log(civic.toString()); console.log(mondeo.toString());
3、帶原型的Constructor
JavaScript 有prototype屬性。及調(diào)用JavaScript構(gòu)造器創(chuàng)建一個對象后,新對象就會具有構(gòu)造器原型的所有屬性。同過這種方式,可以創(chuàng)建多個Car對象(訪問相同的原型)
funcion() Ca(model,year,miles){ this.model=model; this.year=year; this.miles=miles; //注意使用Object.prototype.newMethod 而不是Object.prototype是為了重新定義prototype對象 Car.prototype.toString=function(){ return this.model+"Has done" +this.miles+"miles"; }; }; //用法 var civic=new Car("Honda Civic",2009,20000); var momdeo=new Car("Ford Mondeo",2010,5000); console.log(civic.toString()); console.log(mondeo.toString());
現(xiàn)在toString()的單一實(shí)例就能夠在所有Car對象之間共享了
下面給大家分享構(gòu)造器constructor在實(shí)際項(xiàng)目中易錯的題
class A { public int Avar; public A() { System.out.println("AAA"); doSomething(); } public void doSomething() { Avar = 1111; System.out.println("A.doSomething()"); } } public class B extends A { public int Bvar = 2222; public B() { System.out.println("BBB"); doSomething(); System.out.println("Avar=" + Avar); } public void doSomething() { System.out.println("Bvar=" + Bvar); } public static void main(String[] args) { new B(); } }
順序是這樣得,首先生成B就得先生成A,所以調(diào)用A的構(gòu)造器,輸出AAA,然后調(diào)用方法dosomething,注意:A的該方法被B覆蓋,而你生成的是B的對象,所以它調(diào)用B的方法,由于BVAR目前沒有給定值,所以自動初始化為0;
然后生成B對象,先初始化變量BVAR,然后調(diào)用構(gòu)造器輸出BBB,然后調(diào)用方法,這時BVAR已初始化,所以輸出BVAR=2222,而對象A中變量AVAR由于沒有調(diào)用對象A的方法dosomething,所以其值為0,則輸出0
全部輸出就如下:
AAA
Bvar=0
BBB
Bvar=2222
Avar=0
注意:初始化順序,當(dāng)繼承時,先生成超類對象,生成對象時,先生成靜態(tài)變量,然后是一般變量,然后調(diào)用構(gòu)造器!當(dāng)所有超類對象生成后,生成本對象,順序一樣! 當(dāng)方法被覆蓋時,調(diào)用目前對象的方法!這得注意。
- JS面向?qū)ο蠡A(chǔ)講解(工廠模式、構(gòu)造函數(shù)模式、原型模式、混合模式、動態(tài)原型模式)
- js面向?qū)ο笾R妱?chuàng)建對象的幾種方式(工廠模式、構(gòu)造函數(shù)模式、原型模式)
- JavaScript繼承基礎(chǔ)講解(原型鏈、借用構(gòu)造函數(shù)、混合模式、原型式繼承、寄生式繼承、寄生組合式繼承)
- 構(gòu)造函數(shù)+原型模式構(gòu)造js自定義對象(最通用)
- javascript組合使用構(gòu)造函數(shù)模式和原型模式實(shí)例
- javascript設(shè)計(jì)模式之對象工廠函數(shù)與構(gòu)造函數(shù)詳解
- JavaScript構(gòu)造函數(shù)詳解
- JS特殊函數(shù)(Function()構(gòu)造函數(shù)、函數(shù)直接量)區(qū)別介紹
- 深入理解javascript構(gòu)造函數(shù)和原型對象
- JavaScript中的普通函數(shù)與構(gòu)造函數(shù)比較
- JS常見構(gòu)造模式實(shí)例對比分析
相關(guān)文章
JS+CSS實(shí)現(xiàn)的經(jīng)典圓角下拉菜單效果代碼
這篇文章主要介紹了JS+CSS實(shí)現(xiàn)的經(jīng)典圓角下拉菜單效果代碼,可實(shí)現(xiàn)非常經(jīng)典的圓角下拉菜單效果,涉及JavaScript動態(tài)操作頁面元素css樣式的相關(guān)技巧,需要的朋友可以參考下2015-10-10詳解使用Next.js構(gòu)建服務(wù)端渲染應(yīng)用
這篇文章主要介紹了詳解使用Next.js構(gòu)建服務(wù)端渲染應(yīng)用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07詳解GoJs節(jié)點(diǎn)的選中高亮實(shí)現(xiàn)示例
這篇文章主要為大家介紹了GoJs節(jié)點(diǎn)的選中高亮實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05關(guān)于IE瀏覽器以及Firefox下的javascript冒泡事件的響應(yīng)層級
原來是由于IE瀏覽器以及Firefox對于冒泡型事件的支持層次不同造成的。(如對冒泡事件不是很了解可先查詢相關(guān)資料)2010-10-10html+js實(shí)現(xiàn)動態(tài)顯示本地時間
顯示本地時間的方法有很多,在本文將為大家介紹下如何使用html+js實(shí)現(xiàn)動態(tài)顯示本地時間,感興趣的朋友可以了解下2013-09-09