/*第一種方法,使用function語句,格式如下*/function fn(){ alert("這是使用function語句進(jìn)行函數(shù)定義"); }fn();/*第二種方法,使用Function()構(gòu)造函數(shù)克隆函數(shù)*/var F = new Function("a","b","alert(a+b)"); F(a,b);其實(shí)相當(dāng)于如下代碼:function F(a,b){ alert(a+b); }/*第三種方法,使用函數(shù)直接量*/var zhenn = function(){ alert("zhenn"); } zhenn();。
定義函數(shù)的種方法1.
最基本的作為一個(gè)本本分分的函數(shù)聲明使用。
復(fù)制代碼代碼如下:function func(){}或var func=function(){};2.
作為一個(gè)類構(gòu)造器使用:復(fù)制代碼代碼如下:function class(){}
class.prototype={};
var item=new class();3.
作為閉包使用:復(fù)制代碼代碼如下:(function(){
//獨(dú)立作用域})();4.
可以作為選擇器使用:復(fù)制代碼代碼如下:var addEvent=new function(){
if(!-[1,]) return function(elem,type,func){attachEvent(elem,'on'+type,func);};
else return function(elem,type,func){addEventListener(elem,type,func,false);}
};//避免了重復(fù)判斷5.
在JavaScript中定義對象可以采用以下幾種方式: 1.基于已有對象擴(kuò)充其屬性和方法 2.工廠方式 3.構(gòu)造函數(shù)方式 4.原型(“prototype”)方式 5.動(dòng)態(tài)原型方式-- 1.基于已有對象擴(kuò)充其屬性和方法object.name = "zhangsan";object.sayName = function(name){ this.name = name; alert(this.name);}object.sayName("lisi");-- 2.工廠方式 function createObject() { var object = new Object(); object.username = "zhangsan"; object.password = "123"; object.get = function() { alert(this.username + ", " + this.password); } return object;}var object1 = createObject();var object2 = createObject();object1.get(); -- 采用帶參數(shù)的構(gòu)造方法:function createObject(username, password){ var object = new Object(); object.username = username; object.password = password; object.get = function() { alert(this.username + ", " + this.password); } return object;}var object1 = createObject("zhangsan", "123");object1.get();。
JS函數(shù)的定義方式比較靈活,它不同于其他的語言,每個(gè)函數(shù)都是作為一個(gè)對象被維護(hù)和運(yùn)行的。
先看幾種常用的定義方式:function func1([參數(shù)]){/*函數(shù)體*/}var func2=function([參數(shù)]){/*函數(shù)體*/};var func3=function func4([參數(shù)]){/*函數(shù)體*/};var func5=new Function();上述第一種方式是最常用的方式,不用多說。第二種是將一匿名函數(shù)賦給一個(gè)變量,調(diào)用方法:func2([函數(shù)]);第三種是將func4賦給變量func3,調(diào)用方法:func3([函數(shù)]);或func4([函數(shù)]);第四種是聲明func5為一個(gè)對象。
再看看它們的區(qū)別:function func(){//函數(shù)體}//等價(jià)于var func=function(){//函數(shù)體}但同樣是定義函數(shù),在用法上有一定的區(qū)別。用同樣的方法可以去理解第三種定義方式。
Javascript中定義函數(shù)的方式有多種,函數(shù)直接量就是其中一種。
如var fun = function(){},這里function如果不賦值給fun那么它就是一個(gè)匿名函數(shù)。好,看看匿名函數(shù)的如何被調(diào)用。
方式1,調(diào)用函數(shù),得到返回值。強(qiáng)制運(yùn)算符使函數(shù)調(diào)用執(zhí)行(function(x,y){ alert(x+y); return x+y; }(3,4)); 方式2,調(diào)用函數(shù),得到返回值。
強(qiáng)制函數(shù)直接量執(zhí)行再返回一個(gè)引用,引用再去調(diào)用執(zhí)行(function(x,y){ alert(x+y); return x+y;} )(3,4); 這種方式也是很多庫愛用的調(diào)用方式,如jQuery,Mootools。 方式3,使用voidvoid function(x) { x = x-1; alert(x);}(9);。
JS函數(shù)的定義方式比較靈活,它不同于其他的語言,每個(gè)函數(shù)都是作為一個(gè)對象被維護(hù)和運(yùn)行的。
先看幾種常用的定義方式:function func1([參數(shù)]){/*函數(shù)體*/}var func2=function([參數(shù)]){/*函數(shù)體*/};var func3=function func4([參數(shù)]){/*函數(shù)體*/};var func5=new Function();上述第一種方式是最常用的方式,不用多說。第二種是將一匿名函數(shù)賦給一個(gè)變量,調(diào)用方法:func2([函數(shù)]);第三種是將func4賦給變量func3,調(diào)用方法:func3([函數(shù)]);或func4([函數(shù)]);第四種是聲明func5為一個(gè)對象。
再看看它們的區(qū)別:function func(){//函數(shù)體}//等價(jià)于var func=function(){//函數(shù)體}但同樣是定義函數(shù),在用法上有一定的區(qū)別。用同樣的方法可以去理解第三種定義方式。
第四種定義方式也是需要聲明對象后才可以引用。
Javascript對象定義的幾種方式一.工廠方式:先創(chuàng)建對象,再向?qū)ο筇砑臃椒ê蛯傩裕忾]后調(diào)用不要使用new操作符創(chuàng)建對象。
使用這種方法有很多弊端,把方法定義在工廠函數(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對這種問題雖然可以用下面的方式改進(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)建對象,使用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 檢查對象類型,解決了重復(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對象的指針,Car的兩個(gè)實(shí)例都指向同一個(gè)數(shù)組。
四.混合的構(gòu)造函數(shù)/原型方式:針對原型方式的解決方案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í)例化,具有和工廠方式相同的弊端,不推薦使用。
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時(shí)間:3.107秒