亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > JavaScript > 正文

javascript中定義類的方法匯總

2024-05-06 16:13:03
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了javascript中定義類的方法匯總的相關資料,需要的朋友可以參考下
 
 

JS中定義類的方式有很多種:

1、工廠方式

 

復制代碼代碼如下:

  function Car(){ 
   var ocar = new Object; 
   ocar.color = "blue"; 
   ocar.doors = 4; 
   ocar.showColor = function(){ 
    document.write(this.color) 
   }; 
   return ocar; 
  } 
  var car1 = Car(); 
  var car2 = Car(); 

 

  調用此函數時將創建新對象,并賦予它所有的屬性和方法。使用此函數可以創建2個屬性完全相同的對象。當然我妹可以通過給它傳遞參數來改版這種方式。

 

復制代碼代碼如下:

  function Car(color,door){ 
   var ocar = new Object; 
   ocar.color = color; 
   ocar.doors = door; 
   ocar.showColor = function(){ 
    document.write(this.color) 
   }; 
   return ocar; 
  } 
  var car1 = Car("red",4); 
  var car2 = Car("blue",4); 
  car1.showColor()  //output:"red" 
  car2.showColor()  //output:"blue" 

 

  現在可以通過給函數傳遞不同的參數來得到具有不同值的對象。 
  在前面的例子中,每次調用函數Car(),都要創建showcolor(),意味著每個對象都有一個自己的showcolor()方法。

 但是事實上,每個對象斗共享了同一個函數。 
  雖然可以在函數外定義方法,然后通過將函數的屬性指向該方法。

 

復制代碼代碼如下:

  function showColor(){ 
   alert(this.color); 
  } 
  function Car(){ 
   var ocar = new Object(); 
   ocar.color = color; 
   ocar.doors = door; 
   ocar.showColor = showColor; 
   return ocar; 
  } 

 

  但是這樣看起來不像是函數的方法。 
2、構造函數方式 
  構造函數方式同工廠方式一樣簡單,如下所示:

 

復制代碼代碼如下:

  function Car(color,door)

 

  可以看到構造函數方式在函數內部沒有創建對象,是用this關鍵字。因為在調用構造函數時已經創建了對象,而在函數內部只能用this來訪問對象屬性。 
  現在用new來創建對象,看起來像那么回事了!但是它同工廠方式一樣。每次調用都會為對象創建自己的方法。

3、原型方式

  該方式利用了對象的prototype屬性。首先用空函數創建類名,然后所有的屬性和方法都被賦予prototype屬性。

 

復制代碼代碼如下:

  function Car()

 

  在這段代碼中,首先定義了一個空函數,然后通過prototype屬性來定義對象的屬性。調用該函數時,原型的所有屬性都會立即賦予要創建的對象,所有該函數的對象存放的都是指向showColor()的指針,語法上看起來都屬于同一個對象。 
  但是這個函數沒有參數,不能通過傳遞參數來初始化屬性,必須要在對象創建后才能改變屬性的默認值。 
  原型方式有個很嚴重的問題就是當屬性指向的是對象時,如數組。

 

復制代碼代碼如下:

  function Car(){ 
  } 
  Car.prototype.color = "red"; 
  Car.prototype.doors = 4; 
  Car.prototype.arr = new Array("a","b"); 
  Car.prototype.showColor = function(){ 
   alert(this.color); 
  } 
  var car1 = new Car(); 
  var car2 = new Car(); 
  car1.arr.push("cc"); 
  alert(car1.arr);  //output:aa,bb,cc 
  alert(car2.arr);  //output:aa,bb,cc 

 

  這里由于數組的引用值,Car的兩個對象指向的都是同一個數組,所以當在car1添加值后,在car2中也可以看到。 
 聯合是用構造函數/原型方式就可以像其他程序設計語言一樣創建對象,是用構造函數定義對象的非函數屬性,用原型方式定義對象的方法。

 

復制代碼代碼如下:

  function Car(color,door){ 
   this.color = color; 
   this.doors = door; 
   this.arr = new Array("aa","bb"); 
  } 
  Car.prototype.showColor(){ 
   alert(this.color); 
  } 
  var car1 = new Car("red",4); 
  var car2 = new Car("blue",4); 
  car1.arr.push("cc"); 
  alert(car1.arr);  //output:aa,bb,cc 
  alert(car2.arr);  //output:aa,bb 

 

4、動態原型方式

  動態原型的方式同混合的構造函數/原型方式原理相似。唯一的區別就是賦予對象方法的位置。

 

復制代碼代碼如下:

  function Car(color,door){ 
   this.color = color; 
   this.doors = door; 
   this.arr = new Array("aa","bb"); 
   if(typeof Car._initialized == "undefined"){ 
    Car.prototype.showColor = function(){ 
     alert(this.color); 
    }; 
    Car._initialized = true; 
   } 
  }

 

 動態原型方式是使用一個標志來判斷是否已經給原型賦予了方法。這樣可以保證該方法只創建一次 

6、混合工廠方式

  它的目的師創建假構造函數,只返回另一種對象的新實例。

 

復制代碼代碼如下:

  function Car(){ 
   var ocar = new Object(); 
   ocar.color = "red"; 
   ocar.doors = 4; 
   ocar.showColor = function(){ 
    alert(this.color) 
   }; 
   return ocar; 
  } 

 

  與工廠方式所不同的是,這種方式使用new運算符。 

PS(個人理解):

1) 類通過prototype定義的成員(方法或屬性),是每個類對象共有的,一般不用來定義成員屬性,一個對象修改了屬性值,所有對象均被修改;

2) 類擁有prototype屬性,類對象沒有;

3) 每次new類對象或直接調用類(以下工廠方法形式),都會把定義類(function)的語句執行一次(單例模式可以避免這個情況);

4) 類是function類型,類對象是object類型,只有function類型才prototype屬性;

5) prototype定義的方法訪問不到類的私有變量(類定義的局部變量),但可以通過this訪問類的成員屬性和成員方法(this定義的變量和方法);

6) 定義類的方式:

  a.工廠方式(Object)

  b.繼承方式(prototype)

  c.構造函數方式(this)

  d.混合方式

7) [問題]為什么通過prototype定義的屬性可以通過任意對象來改變?而構造函數方式定義的屬性只屬于對象,不會影響其它對象的屬性值?

  以上就是全部的創建對象方法。目前使用最廣泛的就是混合構造函數/原型方式,此外,動態原型方式也很流行。在功能上與構造函數/原型方式等價。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区三区回区在观看免费视频| 91精品久久久久久久| 国产精品久久久久高潮| 欧美老妇交乱视频| 日韩精品视频在线免费观看| 久久欧美在线电影| 国产91精品视频在线观看| 欧美日韩国产色视频| 久久综合电影一区| 麻豆成人在线看| 国产91精品黑色丝袜高跟鞋| 深夜福利日韩在线看| 日韩精品在线第一页| 欧美黑人巨大精品一区二区| 伊人精品在线观看| 亚洲图片欧洲图片av| 午夜精品国产精品大乳美女| 国产免费一区二区三区香蕉精| 国产精品无av码在线观看| 九九九热精品免费视频观看网站| 黑人与娇小精品av专区| 欧美专区在线视频| 欧美性xxxx极品hd欧美风情| 久久久久久尹人网香蕉| 亚洲国产精品久久久久| 国产精品69av| 亚洲福利视频专区| 疯狂蹂躏欧美一区二区精品| 亚洲女人被黑人巨大进入al| 色妞在线综合亚洲欧美| 日韩精品免费在线播放| 久久精品99久久久久久久久| 一区二区三区高清国产| 日韩中文字幕在线精品| 欧美大学生性色视频| 91精品久久久久久久久中文字幕| 色婷婷亚洲mv天堂mv在影片| 国产精品欧美激情| 亚洲毛片一区二区| 中文字幕亚洲综合久久| 国产不卡精品视男人的天堂| 国产中文欧美精品| 亚洲精品一区中文字幕乱码| 日韩av大片在线| 精品国产区一区二区三区在线观看| 国产一区欧美二区三区| 色妞一区二区三区| 欧美黑人狂野猛交老妇| 18久久久久久| 最近2019年中文视频免费在线观看| 欧美xxxwww| 久久久久久国产三级电影| 日韩免费在线电影| 久热精品视频在线观看| 亚洲一区二区国产| 色999日韩欧美国产| 92看片淫黄大片看国产片| 欧美亚洲视频一区二区| 日韩女优在线播放| 久久久久国产精品免费| 欧美性xxxxx| 亚洲欧美日韩图片| 91夜夜未满十八勿入爽爽影院| 国产精品igao视频| 色爱av美腿丝袜综合粉嫩av| 国产精品免费小视频| 国产成人精品免费视频| 欧洲美女7788成人免费视频| 在线观看国产精品91| 日韩免费中文字幕| 九九精品在线视频| 91香蕉嫩草神马影院在线观看| 丝袜亚洲另类欧美重口| 欧美激情网站在线观看| 国产成人亚洲精品| 91九色综合久久| 久久中文字幕视频| 91精品国产亚洲| 精品国产乱码久久久久久婷婷| 久久精品91久久久久久再现| 美女撒尿一区二区三区| 91亚洲精品久久久| 国产欧美亚洲精品| 亚洲国产成人精品女人久久久| 国产亚洲精品久久久久久777| 久久亚洲春色中文字幕| 日韩中文字幕第一页| 亚洲国产精品yw在线观看| www欧美xxxx| 欧美专区在线观看| 91精品国产综合久久男男| 精品国产福利视频| 成人激情av在线| 国产精品爽爽爽爽爽爽在线观看| 亚洲欧美日韩久久久久久| 欧美乱大交做爰xxxⅹ性3| 欧美一级淫片丝袜脚交| 亚洲精品99久久久久中文字幕| 中文字幕综合在线| 日韩欧美成人网| 欧美在线视频免费观看| 久久久久久久999| 亚洲美女性视频| 亚洲成人精品久久| 日本午夜精品理论片a级appf发布| 亚洲精品国产品国语在线| 亚洲欧美日韩精品久久奇米色影视| 久久99精品久久久久久青青91| 亚洲国产日韩一区| 久久69精品久久久久久久电影好| 奇米一区二区三区四区久久| 91久久久久久久久久久| 精品成人国产在线观看男人呻吟| 日韩经典中文字幕在线观看| 亚洲天堂av女优| 欧美成人午夜影院| 欧美激情亚洲国产| 97人人做人人爱| 午夜精品在线观看| 亚洲人午夜色婷婷| 久久精品一本久久99精品| 午夜伦理精品一区| 精品人伦一区二区三区蜜桃网站| 亚洲欧美日韩国产中文| 国产精品久久久久久久久久小说| 亚洲黄色av网站| 国内精品久久久久久中文字幕| 日韩欧美大尺度| 亚洲福利视频在线| 国产精品久久久久久久久久久久久久| 91网站免费观看| 亚洲一级片在线看| 久久久久999| 亚洲成**性毛茸茸| 91国偷自产一区二区三区的观看方式| 亚洲性线免费观看视频成熟| 韩国精品美女www爽爽爽视频| 欧美精品国产精品日韩精品| 亚洲综合精品一区二区| 日本久久久久久| 性欧美xxxx视频在线观看| 精品久久久久久国产| 奇门遁甲1982国语版免费观看高清| 国产玖玖精品视频| 操日韩av在线电影| 国产精品∨欧美精品v日韩精品| 国产91色在线|免| 亚洲天堂av在线免费| 成人免费观看a| 亚洲国产天堂网精品网站| 国产精品久久久久999| 国产91九色视频| 欧美中文字幕视频在线观看| 一区二区三区日韩在线| 亚洲综合在线播放| 自拍偷拍亚洲欧美| 国产激情综合五月久久| 国产一区二区三区网站| 精品久久久久久久久久久久久| 欧美亚洲午夜视频在线观看| 国语对白做受69| 6080yy精品一区二区三区| 欧美人在线视频| 日韩黄色在线免费观看|