調(diào)用哪個(gè)函數(shù)?
你也許正在想命名沖突的問(wèn)題。比如,下面哪一個(gè)叫做calculate的函數(shù)會(huì)被調(diào)用?
Example 8
CODE:
function calculate(number) { return number/3; }
function getHalfOf(num1, num2, num3) { function calculate(number) { return number/2; }
var result=""; result+=calculate(num1)+" "; result+=calculate(num2)+" "; result+=calculate(num3); } var resultString=getHalfOf(10,20,30); alert(resultString); // 輸出 "5 10 15"
在這個(gè)例子中,編譯器會(huì)首先搜索局部?jī)?nèi)存地址,所以它會(huì)使用內(nèi)嵌的calculate函數(shù)。如果我們刪除了這個(gè)內(nèi)嵌(局部)的calculate函數(shù),這個(gè)代碼會(huì)使用全局的calculate函數(shù)。
函數(shù):數(shù)據(jù)類(lèi)型及構(gòu)造函數(shù)
讓我們來(lái)看看函數(shù)的另一個(gè)特殊功能--這讓它和其它對(duì)象類(lèi)型截然不同。一個(gè)函數(shù)能夠用來(lái)作為一個(gè)數(shù)據(jù)類(lèi)型的藍(lán)圖。這個(gè)特性通常被用在面向?qū)ο缶幊讨衼?lái)模擬用戶(hù)自定義數(shù)據(jù)類(lèi)型(user defined data type)。使用用戶(hù)自定義數(shù)據(jù)類(lèi)型創(chuàng)建的對(duì)象通常被成為用戶(hù)自定義對(duì)象(user defined object)。
數(shù)據(jù)類(lèi)型
在定義了一個(gè)函數(shù)之后,我們也同時(shí)創(chuàng)建了一個(gè)新的數(shù)據(jù)類(lèi)型。這個(gè)數(shù)據(jù)類(lèi)型能夠用來(lái)創(chuàng)建一個(gè)新對(duì)象。下例,我創(chuàng)建了一個(gè)叫做Ball的新數(shù)據(jù)類(lèi)型。
Example DT1
CODE:
function Ball() { } var ball0=new Ball(); // ball0 現(xiàn)在指向一個(gè)新對(duì)象
alert(ball0); // 輸出 "Object",因?yàn)?ball0 現(xiàn)在是一個(gè)對(duì)象
這樣看來(lái),ball0=new Ball()作了什么?new關(guān)鍵字創(chuàng)建了一個(gè)類(lèi)型是Object的新對(duì)象(叫做ball0)。然后它會(huì)執(zhí)行Ball(),并將這個(gè)引用傳給ball0(用于調(diào)用對(duì)象)。下面,你會(huì)看到這條消息:“creating new Ball”,如果Ball()實(shí)際上被運(yùn)行的話(huà)。
Example DT2
CODE: function Ball(message) { alert(message); } var ball0=new Ball("creating new Ball"); // 創(chuàng)建對(duì)象并輸出消息 ball0.name="ball-0"; // ball0現(xiàn)在有一個(gè)屬性:name alert(ball0.name); // 輸出 "ball-0"
我們可以把上面這段代碼的第6行看做是底下的代碼6-8行的一個(gè)簡(jiǎn)寫(xiě):
CODE: function Ball(message) { alert(message); } var ball0=new Object(); ball0.construct=Ball; ball0.construct("creating new ball"); // 執(zhí)行 ball0.Ball("creating.."); ball0.name="ball-0"; alert(ball0.name);
這行代碼ball0.construct=Ball和Example 4中的ptr=myFunction語(yǔ)法一致。
如果你還是不明白這行的含義那就回過(guò)頭再?gòu)?fù)習(xí)一下Example 4。注意:你也許考慮直接運(yùn)行ball0.Ball("..."),但是它不會(huì)起作用的,因?yàn)閎all0并沒(méi)有一個(gè)叫做Ball("...")的屬性,并且它也不知道你究竟想作些什么。
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁(yè) javascript的函數(shù) [4] 下一頁(yè) javascript的函數(shù) [6]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、網(wǎng)站綜合版塊參加討論
|