日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > web前端 > jscript > Javascript 面向?qū)ο缶幊?function是方法(函數(shù))

Javascript 面向?qū)ο缶幊?function是方法(函數(shù))

來(lái)源:程序員人生   發(fā)布時(shí)間:2014-06-15 22:18:56 閱讀次數(shù):3175次

在進(jìn)行編程時(shí),必免不了要碰到復(fù)雜的功能。初學(xué)者最怕復(fù)雜的功能,因?yàn)椴荒軌蚝芎玫倪M(jìn)行功能邊界劃分,只能一大串if、循環(huán)加case堆疊在一起,結(jié)果出來(lái)的程序自己看著暈,別人看著更暈。好程序不是寫(xiě)給computer的,而是寫(xiě)給human的。遇到復(fù)雜功能,應(yīng)該想著把它簡(jiǎn)化、組件化,把小功能封裝成小組件,小功能塊可以任意的組合得到千變?nèi)f化的復(fù)雜功能。function就可以幫助我們把功能進(jìn)行封裝。那什么是封裝呢。要我說(shuō),只要把具體實(shí)現(xiàn)給打包,對(duì)外提供調(diào)用接口那就是封裝,方法也好、類(lèi)也好就做了這些事。

javascript中的function可以用來(lái)創(chuàng)建方法、也可以用來(lái)創(chuàng)建類(lèi),實(shí)際上我們可以認(rèn)為是用function來(lái)模擬出的類(lèi)(說(shuō)到類(lèi)一般都會(huì)要去了解閉包的知識(shí))。還是先看一下方法吧。

javascript函數(shù)分為有名函數(shù)、匿名函數(shù)和在匿名函數(shù)基礎(chǔ)上延伸出來(lái)的立即執(zhí)行函數(shù)。

普通函數(shù)就是用function直接聲明的有名函數(shù)。

function Hello() { alert("hello , everybody!"); }; Hello(); function SayHelloTo(somebody) { alert("hello , " + somebody + "!"); }; SayHelloTo("張三"); 上面分別創(chuàng)建了Hello和SayHelloTo方法。Hello不帶有參數(shù),直接通過(guò)Hello()來(lái)完成調(diào)用。SayHelloTo方法帶有一個(gè)參數(shù),向誰(shuí)問(wèn)候時(shí)需要知道是在問(wèn)候誰(shuí)。在調(diào)用SayHelloTo(“張三”)時(shí)要傳入?yún)?shù)。這些代碼和java、C#都沒(méi)有什么太大區(qū)別。在方法重載上卻有較大改變,javascript本身并不支持什么重載,一個(gè)方法名就對(duì)應(yīng)一個(gè)方法。如果強(qiáng)制的寫(xiě)出多個(gè)同名方法,其實(shí)會(huì)出現(xiàn)先寫(xiě)的方法被覆蓋掉的情況。

function Hello() { alert("hello , everybody!"); }; Hello(); function Hello(somebody) { alert("hello , " + somebody + "!"); }; Hello("張三");

image image

第一個(gè)Hello方法被覆蓋掉,執(zhí)行時(shí)直接調(diào)用Hello()則認(rèn)為調(diào)用第二個(gè)Hello方法但沒(méi)有傳遞參數(shù)值,所以彈出了undefined信息。調(diào)用Hello(“張三”)時(shí)很正常的完成執(zhí)行。其實(shí)javascript也可以用一些直白的方式來(lái)完成重載。學(xué)過(guò)C#的人都會(huì)知道有個(gè)params關(guān)鍵字,通過(guò)它可以實(shí)現(xiàn)向方法傳遞不定個(gè)數(shù)的參數(shù)。我們可以通過(guò)對(duì)參數(shù)的信息做手動(dòng)的判斷也可以模擬出類(lèi)似重載的效果。而在javascript中根本就不需要什么params關(guān)鍵字,就可以很自然的實(shí)現(xiàn)任意個(gè)數(shù)參數(shù)的傳遞。function中有個(gè)arguments屬性,可以把它看成一個(gè)數(shù)組,它按傳遞進(jìn)來(lái)的參數(shù)的順序來(lái)保存所有的參數(shù)。也就是說(shuō)我們?cè)诙x方法時(shí)可以不聲明參數(shù)名。

function ShowArguments() { var args = ""; for (var i = 0; i < arguments.length; i++) { args += arguments[i] + ","; }; alert(args.substr(0, args.length - 1)); }; ShowArguments(1, 2, 3, 4, 5, 6, 7);

image

試著用argements來(lái)模擬一下重載。

function Hello() { if (arguments.length == 0) { alert("hello , everybody!"); } else { alert("hello , " + arguments[0] + "!"); }; }; Hello(); Hello("張三"); 基于參數(shù)個(gè)數(shù)不同的重載。

function Increase(arg) { if (typeof arg == "undefined") { alert("請(qǐng)輸入?yún)?shù)"); } if (typeof arg == "string") { alert(String.fromCharCode(arg.charCodeAt(0) + 1)); } if (typeof arg == "number") { alert(arg + 1); } }; Increase(); Increase("a"); Increase(1); 基于參數(shù)類(lèi)型不同的重載。
函數(shù)除了有名函數(shù)之外也可以是匿名函數(shù),匿名函數(shù)就是沒(méi)有名子的函數(shù),不論函數(shù)有名還是沒(méi)有名子,都是一個(gè)完整的函數(shù)對(duì)象。匿名函數(shù)還是用function來(lái)聲明,但不用為它指定名稱(chēng)。其它的方面,比如參數(shù)等等和有名函數(shù)沒(méi)什么區(qū)別。

function() { …… }; 匿名函數(shù)一般可以滿(mǎn)足臨時(shí)的函數(shù)需求,不需要有變量對(duì)其進(jìn)行引用(有名的函數(shù)可以認(rèn)為是有變量引用的函數(shù))。比如需要一個(gè)函數(shù)做為值對(duì)象做為參數(shù)傳入方法、需要編程的方式為對(duì)象添加事件,用匿名函數(shù)都可以很好的完成。當(dāng)然你也可以單獨(dú)聲明變量來(lái)引用某個(gè)匿名函數(shù)對(duì)象,這和普通有名函數(shù)就沒(méi)什么區(qū)別了。

function Each(array, fun) { for (var i = 0; i < array.length; i++) { fun(array[i]); }; }; var nums = [1, 2, 3, 4, 5, 6, 7]; Each(nums, function(arg) { alert(arg); }); 上面代碼執(zhí)行,依次輸出數(shù)組中的元素。

//在窗體加載時(shí),在標(biāo)題上顯示當(dāng)前時(shí)間 window.onload = function() { document.title = new Date().toString(); }; //也可以將匿名方法傳入定時(shí)器中 setInterval(function() { document.title = new Date().toString(); }, 1000); 使用匿名函數(shù)綁定事件和進(jìn)行定時(shí)操作。

var Hello = function() { alert("hello , everybody!"); }; 如果將匿名函數(shù)賦給變量,那和有名的普通函數(shù)就沒(méi)區(qū)別了。但不管是變量引用還是普通地有名函數(shù),這樣的函數(shù)在內(nèi)存上都持久的占有一定資源。有時(shí)候我們只想執(zhí)行一次大不必使用有引用的函數(shù),直接執(zhí)行匿名函數(shù)可能是最好的選擇。把匿名函數(shù)包起來(lái),加個(gè)括號(hào)執(zhí)行,一切ok,這就是由匿名函數(shù)延伸出來(lái)的立即執(zhí)行函數(shù)。

(function() { alert("hello , everybody!"); })(); (function(somebody) { alert("hello , " + somebody + "!"); })("張三"); 立即執(zhí)行函數(shù)在做事件綁定,設(shè)置回調(diào)函數(shù)等方面往往會(huì)有意想不到的效果,可以解決諸如對(duì)象引用等問(wèn)題。

var student = { Name: "張三", Age: 20, Introduce: function() { alert("我叫" + this.Name + ",今年" + this.Age + "歲了!"); } }; window.onload = (function(obj) { return function() { obj.Introduce(); }; })(student); 因?yàn)閖avascript中函數(shù)的這些特點(diǎn)加之它的對(duì)象的特征,我們還可以寫(xiě)出一些有functional意味的程序出來(lái)。其實(shí)javascript中function真的是老大。

function Sum(fun, x) { if (x <= 0) return 0; return fun(x) + Sum(fun, x - 1); }; alert(Sum(function(i) { return i * i; }, 100)); 下面這又是什么呢?是方法嗎?是類(lèi)嗎?

function Point() { };

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線(xiàn)----------------------------
分享到:
------分隔線(xiàn)----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 欧美a√| 99re视频在线播放 | 成人一级毛片 | 亚洲成人综合在线 | 在线精品小视频 | 久久久久久毛片免费看 | 麻豆国产 | 99久久精品免费看蜜桃的推荐词 | 日韩精品在线免费观看 | 日韩欧美精品一区二区三区 | 欧美日韩一二三 | 在线免费观看亚洲 | 99视频在线| 国产激情一区二区三区 | 91精品国产三级a在线观看 | 久久国产成人精品 | 天堂网在线观看 | 操操操网| 午夜伦伦影理论片大片飘花影院 | www.ccyy.com日本| 男女xx| 日韩av首页| 国产日韩欧美一区二区 | 色婷婷影视 | 亚洲欧美另类久久久精品2019 | 日本在线观看一区二区 | 久久久www成人免费无遮挡大片 | 亚洲成人精选 | 成年人免费观看 | 亚洲欧美在线视频 | av在线电影网站 | 午夜国产精品视频 | 欧美一区二区三区精品免费 | 国产99在线观看 | 久久精品一区二区三区四区 | 日本中文在线观看 | 三及毛片 | 欧美日韩在线观看中文字幕 | 婷婷丁香激情五月 | 精品成人网 | 精品视频一区二区 |