欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javaScript中定義類或?qū)ο蟮奈宸N方式總結(jié)

 更新時(shí)間:2016年12月04日 13:29:58   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇javaScript中定義類或?qū)ο蟮奈宸N方式總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

第一種方式: 工廠方法

能創(chuàng)建并返回特定類型的對(duì)象的工廠函數(shù)(factory function)。

 function createCar(sColor){ 
 var oTempCar = new Object; 
 oTempCar.color = sColor; 
 oTempCar.showColor = function (){ 
 alert(this.color); 
 }; 
 return oTempCar; 
 } 
 var oCar1 = createCar(); 
 var oCar2 = createCar(); 

調(diào)用此函數(shù)時(shí),將創(chuàng)建新對(duì)象,并賦予它所有必要的屬性。使用此方法將創(chuàng)建car對(duì)象的兩個(gè)版本(oCar1和oCar2),他們的屬性完全一樣。

使用此方法存在的問(wèn)題:

1語(yǔ)義上看起來(lái)不像使用帶有構(gòu)造函數(shù)的new運(yùn)算符那么正規(guī)。

2使用這種方式必須創(chuàng)建對(duì)象的方法。每次調(diào)用createCar(),都要?jiǎng)?chuàng)建showColor(),意味著每個(gè)對(duì)象都有自己的showColor()版本,事實(shí)上,每個(gè)對(duì)象都共享了同一個(gè)函數(shù)。

有些開(kāi)發(fā)者在工廠函數(shù)外定義對(duì)象的方法,然后通過(guò)屬性指向該方法。從而避免這個(gè)問(wèn)題:

function createCar(sColor){ 
var oTempCar = new Object; 
oTempCar.color = sColor; 
oTempCar.showColor = showColor; 
return oTempCar; 
} 
function showColor(){ 
alert(this.color); 
}

在這段重寫(xiě)的代碼中,在函數(shù)createCar()前定義了函數(shù)showColor().在createCar()內(nèi)部,賦予對(duì)象一個(gè)已經(jīng)指向已經(jīng)存在的showColor()函數(shù)的指針。從功能上來(lái)講,這樣解決了重復(fù)創(chuàng)建對(duì)象的問(wèn)題,但該函數(shù)看起來(lái)不像對(duì)象的方法。

所有這些問(wèn)題引發(fā)了開(kāi)發(fā)者定義的構(gòu)造函數(shù)的出現(xiàn)。

第二種方式:構(gòu)造函數(shù)方式

function Car(sColor){ 
this.color = sColor; 
this.showColor = function (){ 
alert(this.color); 
}; 
} 
var oCar1 = new Car("red"); 
var oCar2 = new Car("blue"); 
你可能已經(jīng)注意到第一個(gè)差別了,在構(gòu)造函數(shù)內(nèi)部無(wú)創(chuàng)建對(duì)象,而是使用this關(guān)鍵字。使用new運(yùn)算符調(diào)用構(gòu)造函數(shù)時(shí),在執(zhí)行第一行代碼前先創(chuàng)建一個(gè)對(duì)象,只有用this才能訪問(wèn)該對(duì)象。然后可以直接賦予this屬性,默認(rèn)情況下是構(gòu)造函數(shù)的返回值(不必明確使用return運(yùn)算符)。

這種方式在管理函數(shù)方面與工廠方法一樣都存在相同的問(wèn)題。

第三種方式:原型方式

function Car(){ 
} 
Car.prototype.color = "blue"; 
var oCar1 = new Car(); 
var oCar2 = new Car(); 

調(diào)用new Car()時(shí),原型的所有屬性都被立即賦予要?jiǎng)?chuàng)建的對(duì)象,意味著所有的Car實(shí)例存放的都是指向showColor()函數(shù)的指針。從語(yǔ)義上看起來(lái)都屬于一個(gè)對(duì)象,因此解決了前面兩種方式存在的兩個(gè)問(wèn)題。此外使用該方法,還能用instanceof運(yùn)算符檢查給定變量指向的對(duì)象類型。因此,下面的代碼將輸出true:

alert(oCar instanceof Car); //outputs "true"

這個(gè)方式看起來(lái)很不錯(cuò),遺憾的是,它并不盡如人意。

1首先這個(gè)構(gòu)造函數(shù)沒(méi)有參數(shù)。使用原型方式時(shí),不能給構(gòu)造函數(shù)傳遞參數(shù)初始化屬性的值,因?yàn)閏ar1和car2的屬性都等于“red”。

2真正的問(wèn)題出現(xiàn)在屬性指向的是對(duì)象,而不是函數(shù)時(shí)。函數(shù)共享不會(huì)造成任何問(wèn)題,但是對(duì)象卻很少被多個(gè)實(shí)例共享的。

第四種方式:混合的構(gòu)造函數(shù)/原型方式(推薦)

聯(lián)合使用構(gòu)造函數(shù)和原型方式,就可像用其他程序設(shè)計(jì)語(yǔ)言一樣創(chuàng)建對(duì)象。這種概念非常簡(jiǎn)單,即用構(gòu)造函數(shù)定義對(duì)象的所有非函數(shù)屬性,用原型方式定義對(duì)象的函數(shù)屬性(方法)。

function Car(sColor){ 
this.color =sColor; 
this.drivers =new Array("Mike","Sue"); 
} 
Car.prototype.showColor = function(){ 
alert(this.color); 
} 
var oCar1 =new Car("red"); 
var oCar2 =new Car("blue"); 
oCar1.drivers.push("Matt"); 
alert(oCar1.drivers); //outputs "Mike,Sue,Matt" 
alert(oCar1.drivers); //outputs "Mike,Sue" 

第五種方式:動(dòng)態(tài)原型方式(推薦)

對(duì)于習(xí)慣使用其他語(yǔ)言的開(kāi)發(fā)者來(lái)說(shuō),使用混合的構(gòu)造函數(shù)/原型方式感覺(jué)不那么和諧。批評(píng)混合的構(gòu)造函數(shù)/原型方式的人認(rèn)為,在構(gòu)造函數(shù)內(nèi)找屬性,在外部找方法的做法很不合理。所以他們?cè)O(shè)計(jì)了動(dòng)態(tài)原型方式,以提供更友好的編碼風(fēng)格。

動(dòng)態(tài)原型方法的基本想法與混合的構(gòu)造函數(shù)/原型方式相同,即在構(gòu)造函數(shù)內(nèi)定義非函數(shù)屬性,而函數(shù)屬性則利用原型屬性定義。唯一的區(qū)別是賦予對(duì)象方法的位置。下面是使用動(dòng)態(tài)原型方法重寫(xiě)的Car類:

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

以上這篇javaScript中定義類或?qū)ο蟮奈宸N方式總結(jié)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript操作select參考代碼

    javascript操作select參考代碼

    用js控制select的方法,大家可以參考下
    2008-06-06
  • 微信小程序 接入騰訊地圖的兩種寫(xiě)法

    微信小程序 接入騰訊地圖的兩種寫(xiě)法

    這篇文章主要介紹了微信小程序 接入騰訊地圖的兩種寫(xiě)法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • js帶前后翻頁(yè)的圖片切換效果代碼分享

    js帶前后翻頁(yè)的圖片切換效果代碼分享

    這篇文章主要介紹了js帶前后翻頁(yè)的圖片切換效果,圖片切換效果特別適合做產(chǎn)品展示,感興趣的小伙伴可以參考下。
    2015-09-09
  • 小程序開(kāi)發(fā)之模態(tài)框組件封裝

    小程序開(kāi)發(fā)之模態(tài)框組件封裝

    這篇文章主要為大家詳細(xì)介紹了小程序開(kāi)發(fā)之模態(tài)框組件封裝,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • JavaScript代碼模擬鼠標(biāo)自動(dòng)點(diǎn)擊事件示例

    JavaScript代碼模擬鼠標(biāo)自動(dòng)點(diǎn)擊事件示例

    這篇文章主要介紹了JavaScript代碼模擬鼠標(biāo)自動(dòng)點(diǎn)擊事件示例,文章通過(guò)示例代碼和運(yùn)行效果圖介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 跟我學(xué)Nodejs(三)--- Node.js模塊

    跟我學(xué)Nodejs(三)--- Node.js模塊

    這是本系列的第三篇文章了,前面2篇網(wǎng)友們反饋回來(lái)不少的消息,加上最近2天比較忙,一直沒(méi)來(lái)得及整理,周末了,趕緊給大家整理下發(fā)出來(lái),本文講的是node.js模塊
    2014-05-05
  • 通過(guò)seajs實(shí)現(xiàn)JavaScript的模塊開(kāi)發(fā)及按模塊加載

    通過(guò)seajs實(shí)現(xiàn)JavaScript的模塊開(kāi)發(fā)及按模塊加載

    seajs實(shí)現(xiàn)了JavaScript 的 模塊開(kāi)發(fā)及按模塊加載。用來(lái)解決繁瑣的js命名沖突,文件依賴等問(wèn)題,其主要目的是令JavaScript開(kāi)發(fā)模塊化并可以輕松愉悅進(jìn)行加載。下面我們來(lái)一起深入學(xué)習(xí)下吧
    2019-06-06
  • JavaScript快速檢測(cè)瀏覽器對(duì)CSS3特性的支持情況

    JavaScript快速檢測(cè)瀏覽器對(duì)CSS3特性的支持情況

    在項(xiàng)目中需要快速檢測(cè)瀏覽器是否支持某CSS3特性,比如檢測(cè)是否支持“transform”,然后我的布局會(huì)有兩種完全不同的版式
    2012-09-09
  • JS的Event事件對(duì)象使用方法

    JS的Event事件對(duì)象使用方法

    復(fù)習(xí)下事件,長(zhǎng)年用JQ,都給忘了~
    2010-12-12
  • 淺析JavaScript原型繼承的陷阱

    淺析JavaScript原型繼承的陷阱

    JavaScript和其它面向?qū)ο笳Z(yǔ)言一樣,對(duì)象類型采用引用方式。持有對(duì)象的變量只是一個(gè)地址,而基本類型數(shù)據(jù)是值。當(dāng)原型上存儲(chǔ)對(duì)象時(shí),就可能有一些陷阱
    2013-12-12

最新評(píng)論