1:調(diào)用關(guān)鍵字function來構(gòu)造
創(chuàng)新互聯(lián)建站專業(yè)IDC數(shù)據(jù)服務(wù)器托管提供商,專業(yè)提供成都服務(wù)器托管,服務(wù)器租用,綿陽服務(wù)器托管,綿陽服務(wù)器托管,成都多線服務(wù)器托管等服務(wù)器托管服務(wù)。
function?distance(x1,x2,y1,y2)
{
var?dx=x2-x1;
var?dy=y2-y1;
return?Math.sqrt(dx*dx+dy*dy);
}
2:使用Function()構(gòu)造函數(shù)(請(qǐng)注意與上面的大小寫)
1
var?f=new?Function*"x","y","return?x*y");
這行代碼創(chuàng)建了一個(gè)新函數(shù),該函數(shù)和你所熟悉的語法定義的函數(shù)基本上時(shí)等價(jià)的:
1
2
3
4
function?f(x,y)
{
return?x*y;
}
Functino()構(gòu)造函數(shù)可以接受任意多個(gè)字符串參數(shù)。它的最后一個(gè)參數(shù)時(shí)函數(shù)的主體,其中可以包含任何JavaScript語句,語句之間用分號(hào)分隔。其他的參數(shù)都是用來說明函數(shù)要定義的形式參數(shù)名的字符串。如果你定義的函數(shù)沒有參數(shù),那么可以只需給構(gòu)造函數(shù)傳遞一個(gè)字符串(即函數(shù)的主體)即可。?
注意,傳遞給構(gòu)造函數(shù)Function()的參數(shù)中沒有一個(gè)用于說明它要?jiǎng)?chuàng)建的函數(shù)名。用Function()構(gòu)造函數(shù)創(chuàng)建的未命名函數(shù)有時(shí)被成為“匿名函數(shù)”。?
你可能非常想知道Function()構(gòu)造函數(shù)的用途是什么。為什么不能只用function語句來定義所有的函數(shù)呢?原因是Function()構(gòu)造函數(shù)允許我們動(dòng)態(tài)地建立和編譯一個(gè)函數(shù),它不會(huì)將我們限制在function語句預(yù)編譯的函數(shù)體中。這樣做帶來的負(fù)面影響效應(yīng)就是每次調(diào)用一個(gè)函數(shù)時(shí),F(xiàn)unction()構(gòu)造函數(shù)都要對(duì)它進(jìn)行編譯。因此,在循環(huán)體中或者在經(jīng)常使用的函數(shù)中,我們不應(yīng)該頻繁地調(diào)用這個(gè)構(gòu)造函數(shù)。?
使用Function()構(gòu)造函數(shù)的另一個(gè)原因是它能夠?qū)⒑瘮?shù)定義為JavaScript表達(dá)式的一部分,而不是將其定義一個(gè)語句,這種情況下使用它就顯得比較的方面,甚至可以說精致。
3:函數(shù)直接量?
函數(shù)直接量是一個(gè)表達(dá)式,它可以定義匿名函數(shù)。函數(shù)直接量的語法和function語句非常相似,只不過它被用作表達(dá)式,而不是用作語句,而且也無需指定函數(shù)名。下面的三行代碼分別使用function()語句、Funciont()構(gòu)造函數(shù)和函數(shù)直接量定義了三個(gè)基本上相同的函數(shù):
1
2
3
function?f(x){return?x*x};
var?f=new?Function("x","return?x*x;");
var?f=function(x){reurn?x*x};
在JavaScript1.1中,可以使用構(gòu)造函數(shù)Function()來定義函數(shù),在JavaScript1.2和其后的版本中,還可以使用函數(shù)直接量來構(gòu)造函數(shù)。你應(yīng)該注意這兩種方法之間的重要差別。?
首先,構(gòu)造函數(shù)Function()允許在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建和編譯JavaScript代碼。但是函數(shù)直接量卻是函數(shù)結(jié)構(gòu)的一個(gè)靜態(tài)部分,就像function語句一樣。?
其次,作為第一個(gè)差別的必然結(jié)果,每次調(diào)用構(gòu)造函數(shù)Function()時(shí)都會(huì)解析函數(shù)體并且創(chuàng)建一個(gè)新東漢數(shù)對(duì)象。如果對(duì)構(gòu)造函數(shù)的調(diào)用出現(xiàn)在一個(gè)循環(huán)中,或者出現(xiàn)在一個(gè)經(jīng)常被調(diào)用的函數(shù)中,這種方法的效率非常低。另一個(gè)方面,函數(shù)直接量或出現(xiàn)在循環(huán)和函數(shù)中的嵌套函數(shù)不是在每次調(diào)用時(shí)都被重新編譯,而且每當(dāng)遇到一個(gè)函數(shù)直接量時(shí)也不創(chuàng)建一個(gè)新的函數(shù)對(duì)象。?
Function()構(gòu)造函數(shù)和函數(shù)之間量之間的第三點(diǎn)差別是,使用構(gòu)造函數(shù)Function()創(chuàng)建的函數(shù)不使用詞法作用域,相反的,它們總是被當(dāng)作頂級(jí)函數(shù)來編譯,就像下面代碼所說明的那樣:
JavaScript簡(jiǎn)介:
Javacript是一種能讓你的網(wǎng)頁更加生動(dòng)活潑的程式語言,也是目前網(wǎng)頁中設(shè)計(jì)中最容易學(xué)又最方便的語言。你可以利用Javacript輕易的做出親切的歡迎訊息、漂亮的數(shù)字鐘、有廣告效果的跑馬燈及簡(jiǎn)易的選舉,還可以顯示瀏覽器停留的時(shí)間。讓這些特殊效果提高網(wǎng)頁的互動(dòng)性、提供親切的服務(wù)。
由來
談到JavaScript的歷史,首先就得介紹[網(wǎng)景](Netscape)這家公司,相信很多人使用過Netscape瀏覽器來瀏覽網(wǎng)頁,這家公司在設(shè)計(jì)瀏覽器的時(shí)候,一方面為了輔助本身發(fā)展的一種名為L(zhǎng)iveWire的程式,另一方面為了提高網(wǎng)頁設(shè)計(jì)的互動(dòng)性,所以發(fā)展了LiveScript這個(gè)電腦語言。
那JavaScript和LiveScript有什么關(guān)系呢?在Netscape發(fā)展LiveScript的同時(shí),另一家名為[升陽](Sun)的公司也正在發(fā)展Java語言,為了輔助Java的網(wǎng)頁程式方面的設(shè)計(jì),所以這兩家公司進(jìn)行合作,共同發(fā)展LiveScript語言,并且將LiveScript語言改名為Javacript,這就是Javacript的由來。
JavaScript剛開始時(shí)僅應(yīng)用在Netscape瀏覽器,不過隨著使用JavaScript制作網(wǎng)頁的人愈來愈多,微軟的IE瀏覽器也提供了新功能,現(xiàn)在可以在IE瀏覽器上看到JavaScript的效果了。
JavaScript和Java的差別
JavaScript和Java的差別究竟在哪兒呢?雖然名稱很相似,而且都是在Internet和WWW盛行之下,所發(fā)展出為的兩種提供網(wǎng)頁程式設(shè)計(jì)的語言,但是卻有很大的差異。前面介紹過JavaScript的前身是網(wǎng)景(Netscape)公司發(fā)展的Live Script語言,直到和升陽(Sun)公司合作之后,才改名為JavaScript,而Java也是由升陽公司發(fā)展出來的,所以名字才會(huì)這么相似。盡管如此,JavaScript和Java仍然是不同的語言。我們整理出以下四點(diǎn)幫助你了解兩者的差異:
1、JavaScript是一種象文件一樣的描述語言,透過瀏覽器就可以直接執(zhí)行;而Java像正統(tǒng)的程式語言(如C/C++)一樣,必須先進(jìn)行編繹和連結(jié)等動(dòng)作才可執(zhí)行。
2、JavaScript必須編寫在HTML文件中,直接查看網(wǎng)頁的原始碼,就可以看到JavaScript程式,所以沒有保護(hù),任何人都可以透過HTML文件復(fù)制程式;而Java應(yīng)用在網(wǎng)頁的程式稱為Java Applet(Applet是[小程式]的意思),是和HTML文件分開的。
3、JavaScript的結(jié)構(gòu)較為自由松散,譬如,程式中使用的變數(shù)前并不是需要明確的定義,而Java和正統(tǒng)的程式語言一樣,結(jié)構(gòu)較為嚴(yán)謹(jǐn)。
4、JavaScript不具有讀寫檔案及網(wǎng)絡(luò)控制等功能,Java則有提供這些功能,但是JavaScript在網(wǎng)頁內(nèi)容的控制和互動(dòng)性方面,可算是最方便快捷的。
JavaScript的功能
顯示信息提示
許多網(wǎng)站在你一連上時(shí),畫面上會(huì)先出現(xiàn)一個(gè)歡迎訊息對(duì)話盒,不但和你打招呼,還會(huì)發(fā)布一些重要訊息
顯示日期時(shí)間
某些網(wǎng)頁會(huì)顯示目前的日期和時(shí)間,可能你會(huì)覺得有點(diǎn)神奇,怎么瀏覽器會(huì)知道目前的時(shí)間呢?這也是JavaScript提供的功能,它可以偵測(cè)你的電腦目前的時(shí)間,并且顯示在網(wǎng)頁中。
顯示更新日期
許多網(wǎng)頁會(huì)公告最新更新日期讓大家知道,Java Scirpt可以自動(dòng)偵測(cè)網(wǎng)頁修改的日期,讓你省去在每次修改網(wǎng)頁時(shí)就得修改日期的動(dòng)作。
跑馬燈文字
讓你可以方便顯示較長(zhǎng)的訊息,又不占去大塊的版面空間。
按鈕變化效果
當(dāng)你移動(dòng)滑鼠游到左邊的按鈕上時(shí),按鈕便會(huì)變成色,在瀏覽器下方狀態(tài)列上也會(huì)顯示出相關(guān)文字,這也是利用JavaScript制作的動(dòng)態(tài)效果。
文章出處:
Javascript對(duì)象定義的幾種方式
一.工廠方式:先創(chuàng)建對(duì)象,再向?qū)ο筇砑臃椒ê蛯傩?,封閉后調(diào)用不要使用new操作符創(chuàng)建對(duì)象。使用這種方法有很多弊端,把方法定義在工廠函數(shù)內(nèi)部的時(shí)候,每次調(diào)用的時(shí)候都會(huì)產(chǎn)生新的函數(shù)
function factory(name,person,address,time){
var tmp=new Object;
tmp.name=name;
tmp.person=person;
tmp.address=address;
tmp.workTime=function(){
alert("we start to work at" + time);
}
return tmp;
}
var factory1=factory("drugs",100,"huashan Rd",10);
var factory2=factory("TCMdrugs",100,"hongqiao Rd",11);
factory1.workTime();
factory2.workTime();//Here,factory1 and factory2 have different method
對(duì)這種問題雖然可以用下面的方式改進(jìn),但是缺乏很好的封裝性
function factory(name,person,address,time){
var tmp=new Object;
tmp.name=name;
tmp.person=person;
tmp.address=address;
tmp.workTime=workTime();
return tmp;
}
function workTime(){
alert("we start to work at" + this.time);
}
二,構(gòu)造函數(shù)方式,在構(gòu)造函數(shù)內(nèi)部不創(chuàng)建對(duì)象,使用this關(guān)鍵字,使用時(shí)候用new操作符,存在和工廠方式相同的問題,重復(fù)創(chuàng)建函數(shù)。
function counstruct(name,person,address,time){
this.name=name;
this.person=person;
this.address=address;
this.workTime=function(){
alert("we start to work at" + this.time);
};
}
三.原型方式:利用prototype屬性來實(shí)現(xiàn)屬性和方法,可以通過instanceof 檢查對(duì)象類型,解決了重復(fù)創(chuàng)建函數(shù)的問題,但不能通過傳遞參數(shù)初始化屬性
function Car(){
}
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.showColor = function(){
alert(this.color);
};
var car1 = new Car();
var car2 = new Car();
但是如果遇到下面的情況,又出問題了
Car.prototype.drivers = new Array("mike", "sue");
car1.drivers.push("matt");
alert(car1.drivers); //outputs "mike,sue,matt"
alert(car2.drivers); //outputs "mike,sue,matt"
drivers是指向Array對(duì)象的指針,Car的兩個(gè)實(shí)例都指向同一個(gè)數(shù)組。
四.混合的構(gòu)造函數(shù)/原型方式:針對(duì)原型方式的解決方案
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 car1 = new Car("red", 4, 23);
var car2 = new Car("blue", 3, 25);
car1.drivers.push("matt");
alert(car1.drivers);
alert(car2.drivers);
五.動(dòng)態(tài)原型方式:這種方式是極力推薦的方式,避免了前面幾種方式所出現(xiàn)的問題,提供了更友好的編碼風(fēng)格
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;
}
}
var car1 = new Car("red", 4, 23);
var car2 = new Car("blue", 3, 25);
car1.drivers.push("matt");
alert(car1.drivers);
alert(car2.drivers);
六.混合工廠方式:和工廠方式有些相似,但采用new關(guān)鍵字實(shí)例化,具有和工廠方式相同的弊端,不推薦使用
新聞標(biāo)題:定義javascript,定義JavaScript函數(shù)
文章網(wǎng)址:http://jinyejixie.com/article28/dsecgjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、做網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、外貿(mào)建站、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)