![JavaScript中5種調(diào)用函數(shù)的方法_第1頁(yè)](http://file4.renrendoc.com/view/19c0236593a17e313798e79ce0275769/19c0236593a17e313798e79ce02757691.gif)
![JavaScript中5種調(diào)用函數(shù)的方法_第2頁(yè)](http://file4.renrendoc.com/view/19c0236593a17e313798e79ce0275769/19c0236593a17e313798e79ce02757692.gif)
![JavaScript中5種調(diào)用函數(shù)的方法_第3頁(yè)](http://file4.renrendoc.com/view/19c0236593a17e313798e79ce0275769/19c0236593a17e313798e79ce02757693.gif)
![JavaScript中5種調(diào)用函數(shù)的方法_第4頁(yè)](http://file4.renrendoc.com/view/19c0236593a17e313798e79ce0275769/19c0236593a17e313798e79ce02757694.gif)
![JavaScript中5種調(diào)用函數(shù)的方法_第5頁(yè)](http://file4.renrendoc.com/view/19c0236593a17e313798e79ce0275769/19c0236593a17e313798e79ce02757695.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第第頁(yè)JavaScript中5種調(diào)用函數(shù)的方法JavaScript中5種調(diào)?函數(shù)的?法
這篇?章詳細(xì)的介紹了Javascript中各種函數(shù)調(diào)?的?法及其原理,對(duì)于理解JavaScript的函數(shù)有很?的幫助!
JavaScript,調(diào)?函數(shù)的5種?法
?次??次的,我發(fā)現(xiàn),那些有bug的Javascript代碼是由于沒有真正理解Javascript函數(shù)是如何?作?導(dǎo)致的(順便說(shuō)?下,許多那樣的代碼是我寫的).JavaScript擁有函數(shù)式編程的特性,當(dāng)我們選擇?對(duì)它的時(shí)候,這將成為我們前進(jìn)的阻礙.
作為初學(xué)者,我們來(lái)測(cè)試五種函數(shù)調(diào)?的?法,從表?來(lái)看我們會(huì)認(rèn)為那些函數(shù)與C#中函數(shù)的作??常相似,但是我們?會(huì)?可以看到還是有?常重要的不同的地?的,忽視這些差異?疑會(huì)導(dǎo)致難于跟蹤的bug。?先讓我們創(chuàng)建?個(gè)簡(jiǎn)單的函數(shù),這個(gè)函數(shù)將在將在下?中使?,這個(gè)函數(shù)僅僅返回當(dāng)前的this的值和兩個(gè)提供的參數(shù).
復(fù)制代碼代碼如下:
scripttype="text/javascript"
functionmakeArray(arg1,arg2){
return[this,arg1,arg2];
}
predict/script
最常?的?法,但不幸的,全局的函數(shù)調(diào)?
當(dāng)我們學(xué)習(xí)Javascript時(shí),我們了解到如何?上??例中的語(yǔ)法來(lái)定義函數(shù)。
,我們也知道調(diào)?這個(gè)函數(shù)?常的簡(jiǎn)單,我們需要做的僅僅是:
復(fù)制代碼代碼如下:
makeArray('one','two');
//=[window,'one','two']
Waitaminute.What'sthatwindow
alert(hodThatDoesntExist);
/
/=undefined
alert(typeofwindow.makeArray);
//=
window.makeArray('one','two');
//=[window,'one','two']
我說(shuō)最普遍的調(diào)??法是不幸的是因?yàn)樗鼘?dǎo)致我們聲明的函數(shù)默認(rèn)是全局的.我們都知道全局成員不是編程的最佳實(shí)踐.這在JavaScript?是特別的正確,在JavaScript中避免使?全局的成員,你是不會(huì)為之后悔的.
JavaScript函數(shù)調(diào)?規(guī)則1
在沒有通過(guò)明確所有者對(duì)象?直接調(diào)?的函數(shù)中,如myFunction(),將導(dǎo)致this的值成為默認(rèn)對(duì)象(瀏覽器中的窗?)。
函數(shù)調(diào)?
讓我們現(xiàn)在創(chuàng)建?個(gè)簡(jiǎn)單的對(duì)象,使?makeArray函數(shù)作為它的?個(gè)?法,我們將使?json的?式來(lái)聲明?個(gè)對(duì)象,我們也來(lái)調(diào)?這個(gè)?法
復(fù)制代碼代碼如下:
//creatingtheobject
vararrayMaker={
品質(zhì)因數(shù)someProperty:'somevaluehere',
make:makeArray
};
//invokethemake()method
arrayMaker.make('one','two');
//=[arrayMaker,'one','two']
//alternativesyntax,usingsquarebrackets
arrayMaker['make']('one','two');
//=[arrayMaker,'one','two']
看到這?的不同了吧,this的值變成了對(duì)象本?.你可能會(huì)疑問(wèn)原始的函數(shù)定義并沒有改變,為何它不是window了呢.好吧,這就是函數(shù)在JSavacript中傳遞的?式,函數(shù)在JavaScript?是?個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型,確切的說(shuō)是?個(gè)對(duì)象.你可以傳遞它們或者復(fù)制他們.就好像整個(gè)函數(shù)連帶參數(shù)列表和函數(shù)體都被復(fù)制,且被分配給了arrayMaker?的屬性make,那就好像這樣定義?個(gè)arrayMaker:
復(fù)制代碼代碼如下:
vararrayMaker={
someProperty:'somevaluehere',
make:function(arg1,arg2){
return[this,arg1,arg2];
}
};
JavaScript函數(shù)調(diào)?規(guī)則2
在?個(gè)使??法調(diào)?語(yǔ)法,像Function()或者obj['myFunction'](),這時(shí)this的值為obj
這是事件處理代碼中bug的主要源頭,看看這些例?
復(fù)制代碼代碼如下:
inputtype="button"value="Button1"id="btn1"/
inputtype="button"value="Button2"id="btn2"/
inputtype="button"value="Button3"id="btn3"onclick="buttonClicked();"/
scripttype="text/javascript"
functionbuttonClicked(){
vartext=(this===window)?'window':this.id;
alert(text);
}
varbutton1=ElementById('btn1');
varbutton2=ElementById('btn2');
/script
點(diǎn)擊第?個(gè)按鈕將會(huì)顯?”btn”因?yàn)樗?個(gè)?法調(diào)?,this為所屬的對(duì)象(按鈕元素)點(diǎn)擊第?個(gè)按鈕將顯?”window”因?yàn)閎uttonClicked是被直接調(diào)?的(不像obj.buttonClicked().)這和我們第三個(gè)按鈕,將事件處理函數(shù)直接放在標(biāo)簽?是?樣的.所以點(diǎn)擊第三個(gè)按鈕的結(jié)果是和第?個(gè)?樣的.
使?像jQuery的JS庫(kù)有這樣的優(yōu)點(diǎn),當(dāng)在jQuery?定義了?個(gè)事件處理函數(shù),JS庫(kù)會(huì)幫助重寫this的值以保證它包含了當(dāng)前事件源元素的引?,
復(fù)制代碼代碼如下:mum
//使?jQuery
$('#btn1').click(function(){
alert(this.id);//jQueryensures'this'willbethebutton
});
jQuery是如何重載this的值的呢?繼續(xù)閱讀
另外兩個(gè):apply()和call()
你越多的使?JavaScript的函數(shù),你就越多的發(fā)現(xiàn)你需要傳遞函數(shù)并在不同的上下??調(diào)?他們,就像Qjuery在事件處理函數(shù)?所做的?樣,你往往經(jīng)常需要重置this的值.記住我告訴你的,在Javascript中函數(shù)也是對(duì)象,函數(shù)對(duì)象包含?些預(yù)定義的?法,其中有兩個(gè)便是apply()和call(),我們可以使?它們來(lái)對(duì)this進(jìn)?重置.
復(fù)制代碼代碼如下:
vargasGuzzler={year:2023,model:'DodgeBailout'};
makeArray.apply(gasGuzzler,['one','two']);
//=[gasGuzzler,'one','two']
makeArray.call(gasGuzzler,'one','two');
//=[gasGuzzler,'one','two']
這兩個(gè)?法是相似的,不同的是后?的參數(shù)的不同,Function.apply()是使??個(gè)數(shù)組來(lái)傳遞給函數(shù)的,?Function.call()是將這些參數(shù)獨(dú)?傳遞的,在實(shí)踐中你會(huì)發(fā)現(xiàn)apply()在?多數(shù)情況下更?便.
JSavacript函數(shù)調(diào)?規(guī)則3windowsme
如果我們想在不復(fù)制函數(shù)到?個(gè)?法?想重載this的值的時(shí)候,我們可以使?myFunction.apply(obj)或myFunction.call(obj).
構(gòu)造器
我不想深?研究在Javascript中類型的定義,但是在此刻我們需要知道在Javascript中沒有類,?且任何
?個(gè)?定義的類型需要?個(gè)初始化函數(shù),使?原型對(duì)象(作為初始化函數(shù)的?個(gè)屬性)定義你的類型也是?個(gè)不錯(cuò)的主義,讓我們來(lái)創(chuàng)建?個(gè)簡(jiǎn)單的類型
復(fù)制代碼代碼如下:
//聲明?個(gè)構(gòu)造器
functionArrayMaker(arg1,arg2){
this.someProperty='whatever';
this.theArray=[this,arg1,arg2];
海倫英語(yǔ)}
//聲明實(shí)例化?法
ArrayMtotype={
someMethod:function(){
alert('someMethodcalled');
鏈?zhǔn)椒磻?yīng)
},
getArray:function(){注會(huì)考試科目
returnthis.theArray;
}
};
varam=newArrayMaker('one','two');
varother=newArrayMaker('first','cond');
托福成績(jī)查詢
//=[am,'one','two']
?個(gè)?常重要并值得注意的是出現(xiàn)在函數(shù)調(diào)?前?的new運(yùn)算符,沒有那個(gè),你的函數(shù)就像全局函數(shù)?樣,且我們創(chuàng)建的那些屬性都將是創(chuàng)建在全局對(duì)象上(window),?你并不想那樣,另?個(gè)話題是,因?yàn)樵谀愕臉?gòu)造器?沒有返回值,所以如果你忘記使?new運(yùn)算符,將導(dǎo)致你的?些變量被賦值為unde
英語(yǔ)詞匯fined.因?yàn)檫@個(gè)原因,構(gòu)造器函數(shù)以?寫字母開頭是?個(gè)好的習(xí)慣,這可以作為?個(gè)提醒,讓你在調(diào)?的時(shí)候不要忘記前?的new運(yùn)算符.
忽略不計(jì)帶著這樣的??,初始化函數(shù)?的代碼和你在其他語(yǔ)??寫的初
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國(guó)汽車超高頻天線行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025年全球及中國(guó)多托盤貨叉行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球汽車行業(yè)用生物基聚酰胺行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- IDC機(jī)柜租賃服務(wù)合同
- 小區(qū)綠化承包合同
- 二手房買賣合同代辦
- 預(yù)付款擔(dān)保合同模板
- 室內(nèi)裝修合同協(xié)議書模板
- 合同擔(dān)保合作協(xié)議
- 地震監(jiān)測(cè)預(yù)警系統(tǒng)研發(fā)合同
- 2025-2030年中國(guó)納米氧化鋁行業(yè)發(fā)展前景與投資戰(zhàn)略研究報(bào)告新版
- 2025年度正規(guī)離婚協(xié)議書電子版下載服務(wù)
- 2025年貴州蔬菜集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 煤礦安全生產(chǎn)方針及法律法規(guī)課件
- 2025年教科室工作計(jì)劃樣本(四篇)
- 【7歷期末】安徽省宣城市2023-2024學(xué)年七年級(jí)上學(xué)期期末考試歷史試題
- 春節(jié)后安全生產(chǎn)開工第一課
- 2025光伏組件清洗合同
- 電力電纜工程施工組織設(shè)計(jì)
- 2024年網(wǎng)格員考試題庫(kù)完美版
- 《建筑與市政工程防水規(guī)范》解讀
評(píng)論
0/150
提交評(píng)論