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

首頁 > 編程 > JavaScript > 正文

JS中類或對象的定義說明

2019-11-20 20:58:02
字體:
來源:轉載
供稿:網友
我們知道,JS是面向對象的。談到面向對象,就不可避免的要涉及類的概念。一般像c#,java這些強類型語言都有固定的定義類的語法。而JS的不同之處在于它能使用各種方法實現自己的類和對象。一般的實現有以下幾種方式:

1.工廠方式
工廠方式是指創建一個返回特定對象類型的工廠函數,示例代碼如下:
復制代碼 代碼如下:

function createCar(sColor,iDoors,iMpg)
{
   var oTempCar=new Object;
   oTempCar.color=sColor;
   oTempCar.doors=iDoors;
   oTempCar.mpg=iMpg;
   oTempCar.showColor=function()
   {
        alert(this.color);
   }
   return oTempCar;
}
var oCar1=createCar("red",4,23);
var oCar2=createCar("blue",3,25);
oCar1.showColor();
oCar2.showColor();

這種方式每次調用它的工廠函數,都會創建一個新對象??蓡栴}在于每次生成一個新對象,都要創建新函數showColor,這使得每個對象都有自己的showColor版本,而事實上,所有的對象都共享同一個函數.為解決這個問題,開發者在工廠函數的外面定義了對象的方法,然后賦予對象一個指針指向這個這個函數,如下
復制代碼 代碼如下:

function showColor()
{
   alert(this.color);
}
function createCar(sColor,iDoors,iMpg)
{
   var oTempCar=new Object;
   oTempCar.color=sColor;
   oTempCar.doors=iDoors;
   oTempCar.mpg=iMpg;
   oTempCar.showColor=showColor;
   return oTempCar;
}
var oCar1=createCar("red",4,23);
var oCar2=createCar("blue",3,25);
oCar1.showColor();
oCar2.showColor();

這樣就不需要為每一個對象都創建自己的showColor函數,而只是創建指向這個函數的指針.這從功能上解決了問題,但是該函數卻不像對象的方法。于是,引出了構造函數的方式。

2.構造函數方式
構造函數與工廠函數很相似,示例代碼如下:
復制代碼 代碼如下:

function Car(sColor,iDoors,iMpg)
{
   this.color=sColor;
   this.doors=iDoors;
   this.mpg=iMpg;
   this.showColor=function()
   {
      alert(this.color);
   }
}
var oCar1=new Car("red",4,23);
var oCar2=new Car("blue",3,25);

在構造函數中,內部無創建對象,而是使用this關鍵字。使用new運算符調用構造函數時,在執行第一行代碼之前先創建一個對象,只有用this才能訪問這個對象。但是這會遇到什么問題呢,很顯然,它的每個對象也都會創建自己的showColor函數版本。為解決這個問題,引出了以下的原型方式.

3.原型方式
該方式利用了對象的prototype屬性,可把它看成創建新對象所依賴的原型。這里,用空構造函數來設置類名。然后把所有的方法和屬性都直接賦予prototype屬性。如下:
復制代碼 代碼如下:

function Car()
{}
Car.prototype.color="red";
Car.prototype.doors=4;
Car.prototype.mpg=23;
Car.prototype.drivers=new Array("Mike","Sue");
Car.prototype.showColor=function()
{
   alert(this.color);
}

原型方式只能直接賦值,而不能通過給構造函數傳遞參數初始化屬性的值。在用這種方式時,會遇到兩個問題,不知道大家注意到沒有。第一問題是采用這種方式必須創建每個對象后才能改變屬性的默認值。而不能在創建每個對象時都會直接有自己所需要的屬性值。這點很討厭。第二個問題在于屬性所指的是對象的時候。函數共享不會出現任何問題,但是對象共享卻會出現問題。因為每個實例一般都要實現自己的對象。

如下面:
復制代碼 代碼如下:

var oCar1=new Car();
var oCar2=new Car();
oCar1.drivers.push("Matt");
alert(oCar1.drivers);//輸出 "Mike,Sue,Matt"
alert(oCar2.drivers);//輸出"Mike,Sue,Matt"

因此drivers屬性只是指向對象的指針,所以所有的實例事實上共享同一個對象。由于出現這這些問題,我們引出了下面的聯合使用構造函數和原型方式。

4.混合的構造函數/原型方式
這種方式的思想是用構造函數定義對象的所有非函數屬性(包括普通屬性和指向對象的屬性),用原型方式定義對象的函數屬性(方法)。結果使得所有的函數都只被創建一次,而每個對象都有自己的對象屬性實例。示例代碼如下:
復制代碼 代碼如下:

function Car(sColor,iDoors,iMpg)
{
   this.color=sColor;
   this.doors=iDoors;
   this.mpg=iMpg;
   this.drivers=new Array("Mike","Sue");
}
Car.prototype.showColor=function()
{
   alert(this.color);
}
var oCar1=new Car("red",4,23);
var oCar2=new Car("blue",3,25);
oCar1.drivers.push("Matt");
alert(oCar1.drivers);//輸出 "Mike,Sue,Matt"
alert(oCar2.drivers);//輸出 "Mike,Sue"

由實例代碼可知,這種方式同時解決了上一種方式的兩個問題。不過,采用這種方式,仍有些開發者覺得不夠完美。

5.動態原型方式
我們可知,大多數面向對象語言都對屬性和方法進行了視覺上的封裝。而上述方式的showColor方法卻定義在了類的外面。因此,他們設計了動態原型方法。這種方式的基本思想和混合的構造函數/原型方式相同,唯一不同之處在于對象方法的位置。如下所示:
復制代碼 代碼如下:

function Car(sColor,iDoors,iMpg)
{
   this.color=sColor;
   this.doors=iDoors;
   this.mpg=iMpg;
   this.drivers=new Array("Mike","Sue");
   if(typeof Car._initialized=="undefined")
  {
     Car.prototype.showColor=function()
     {
        alert(this.color);
     }
  }
  Car._initialized=true;
}

這種方式Car.prototype.showColor只被創建一次。這樣依賴,這段代碼更像其他語言中的類定義了。

6.混合工廠方式
這種方式通常是不能應該前一種方式的變通方法。它的目的是創建假構造函數,只返回另一種對象的新實例。
復制代碼 代碼如下:

function createCar()
{
   var oTempCar=new Object;
   oTempCar.color=“red”;
   oTempCar.doors=4;
   oTempCar.mpg=23;
   oTempCar.showColor=function()
   {
        alert(this.color);
   };
   return oTempCar;
}
var car=new Car();

由于在Car()構造函數內部調用了new運算符,所以自動忽略第二個new運算符。在構造函數內部創建的對象被傳遞回變量var。這種方式在對象方法的內部管理方面與經典方式有著相同的問題。所以強烈建議:除非萬不得已,還是避免使用這種方式。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久影视精品| 色樱桃影院亚洲精品影院| 午夜剧场成人观在线视频免费观看| 在线视频精品一| 91性高湖久久久久久久久_久久99| 久久影视电视剧免费网站清宫辞电视| 中文字幕日韩有码| 精品美女久久久久久免费| 91精品国产综合久久香蕉的用户体验| 九九九久久久久久| 国产精品久久久久秋霞鲁丝| 欧美精品在线网站| 91久久精品国产| 91亚洲人电影| 国产美女直播视频一区| 欧美日韩性视频| 国精产品一区一区三区有限在线| 亚洲国产精品电影在线观看| 国产综合色香蕉精品| 91国偷自产一区二区三区的观看方式| 欧美日韩第一页| 亚洲成人网av| 欧美日韩亚洲一区二区三区| 国产精品成人国产乱一区| 92版电视剧仙鹤神针在线观看| 欧美激情图片区| 国产精品久久久久久影视| 最近中文字幕mv在线一区二区三区四区| 国自产精品手机在线观看视频| 国产欧美精品一区二区三区介绍| 中文字幕视频在线免费欧美日韩综合在线看| 国产精品视频中文字幕91| 精品国产美女在线| 国产成人亚洲精品| 亚洲a级在线观看| 成人国产精品色哟哟| 国产成人jvid在线播放| 81精品国产乱码久久久久久| 亚洲精品国产综合区久久久久久久| 亚洲国产成人久久| 欧美亚洲在线观看| 黄色成人av网| 色久欧美在线视频观看| 久久精品色欧美aⅴ一区二区| 亚洲精品狠狠操| 国产福利视频一区| 久久天天躁狠狠躁夜夜躁| 久久久人成影片一区二区三区观看| 91免费人成网站在线观看18| 欧美天天综合色影久久精品| 欧美乱妇高清无乱码| 国产精品羞羞答答| 国产精品男人的天堂| 啊v视频在线一区二区三区| 亚洲最新在线视频| 4k岛国日韩精品**专区| 久久69精品久久久久久久电影好| 欧美大成色www永久网站婷| 91探花福利精品国产自产在线| 黄色成人在线免费| 国产精品视频xxx| 国产精品视频男人的天堂| 日韩在线观看免费网站| 欧美成人午夜免费视在线看片| 久久久久久久久久久久久久久久久久av| 欧美一区视频在线| 日韩亚洲欧美中文高清在线| 97精品视频在线| 久久成人这里只有精品| 亚洲tv在线观看| 精品福利免费观看| 91tv亚洲精品香蕉国产一区7ujn| 一本一道久久a久久精品逆3p| 欧美裸体xxxx| 亚洲加勒比久久88色综合| 91精品国产91久久久久久最新| 欧美电影院免费观看| 日韩成人在线播放| 成人午夜高潮视频| 在线观看视频亚洲| xxxx性欧美| 国产精品亚洲第一区| 成人综合网网址| 精品视频www| 日韩精品中文在线观看| 久久夜色精品国产亚洲aⅴ| 久热精品在线视频| 日本精品视频在线| 中文字幕成人在线| 91在线观看免费高清完整版在线观看| 亚洲精品999| 国产精品久久久久77777| 亚洲字幕一区二区| 中文字幕日韩免费视频| 午夜精品久久久久久久男人的天堂| 成年人精品视频| 亚洲福利在线观看| 8x海外华人永久免费日韩内陆视频| 美女啪啪无遮挡免费久久网站| 日韩小视频网址| 亚洲视频电影图片偷拍一区| 国产精品一久久香蕉国产线看观看| 日韩中文字幕在线观看| 日韩少妇与小伙激情| 成人免费xxxxx在线观看| 日本精品在线视频| 久久精品福利视频| 成人激情视频免费在线| 国产精品美女免费看| 久久国产精品亚洲| 一区二区国产精品视频| 精品国产鲁一鲁一区二区张丽| 欧美精品18videosex性欧美| 狠狠综合久久av一区二区小说| 国产精品色午夜在线观看| 国产精品美女久久久久av超清| 欧美色图在线视频| 欧美日韩综合视频| 奇米一区二区三区四区久久| 91av视频在线| 精品偷拍各种wc美女嘘嘘| 久久色精品视频| 一本色道久久88亚洲综合88| 久久久免费av| 成人xxxxx| 久久国产精品久久精品| 欧美激情亚洲自拍| 最近2019好看的中文字幕免费| 中文字幕在线视频日韩| 欧美在线观看网站| 日韩成人av网| 精品日韩视频在线观看| 欧美成人午夜剧场免费观看| 欧美一级大片在线免费观看| 欧美色道久久88综合亚洲精品| 亚洲欧洲美洲在线综合| 欧美综合一区第一页| 韩日欧美一区二区| 亚洲国产欧美日韩精品| 55夜色66夜色国产精品视频| 日韩欧美国产中文字幕| 亚洲欧美国产日韩天堂区| 国产精品av网站| 久久精品视频一| 成人免费xxxxx在线观看| 国产精品视频xxx| 国产精品久久不能| 精品国产拍在线观看| 亚洲影院色无极综合| 国产精品偷伦视频免费观看国产| 一区二区三区精品99久久| 国产精品欧美亚洲777777| 欧美成年人视频网站欧美| 国产精品吴梦梦| 日韩美女毛茸茸| 国产精品福利久久久| 91色精品视频在线| 2019中文字幕在线免费观看| 亚洲午夜精品久久久久久性色| 北条麻妃一区二区在线观看| 91精品国产91久久久久久不卡| 91国自产精品中文字幕亚洲| 国产成一区二区| 国产欧洲精品视频|