多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jscript > Javascript 面向對象編程 function是方法(函數)

Javascript 面向對象編程 function是方法(函數)

來源:程序員人生   發布時間:2014-06-15 22:18:56 閱讀次數:3169次

在進行編程時,必免不了要碰到復雜的功能。初學者最怕復雜的功能,因為不能夠很好的進行功能邊界劃分,只能一大串if、循環加case堆疊在一起,結果出來的程序自己看著暈,別人看著更暈。好程序不是寫給computer的,而是寫給human的。遇到復雜功能,應該想著把它簡化、組件化,把小功能封裝成小組件,小功能塊可以任意的組合得到千變萬化的復雜功能。function就可以幫助我們把功能進行封裝。那什么是封裝呢。要我說,只要把具體實現給打包,對外提供調用接口那就是封裝,方法也好、類也好就做了這些事。

javascript中的function可以用來創建方法、也可以用來創建類,實際上我們可以認為是用function來模擬出的類(說到類一般都會要去了解閉包的知識)。還是先看一下方法吧。

javascript函數分為有名函數、匿名函數和在匿名函數基礎上延伸出來的立即執行函數。

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

function Hello() { alert("hello , everybody!"); }; Hello(); function SayHelloTo(somebody) { alert("hello , " + somebody + "!"); }; SayHelloTo("張三"); 上面分別創建了Hello和SayHelloTo方法。Hello不帶有參數,直接通過Hello()來完成調用。SayHelloTo方法帶有一個參數,向誰問候時需要知道是在問候誰。在調用SayHelloTo(“張三”)時要傳入參數。這些代碼和java、C#都沒有什么太大區別。在方法重載上卻有較大改變,javascript本身并不支持什么重載,一個方法名就對應一個方法。如果強制的寫出多個同名方法,其實會出現先寫的方法被覆蓋掉的情況。

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

image image

第一個Hello方法被覆蓋掉,執行時直接調用Hello()則認為調用第二個Hello方法但沒有傳遞參數值,所以彈出了undefined信息。調用Hello(“張三”)時很正常的完成執行。其實javascript也可以用一些直白的方式來完成重載。學過C#的人都會知道有個params關鍵字,通過它可以實現向方法傳遞不定個數的參數。我們可以通過對參數的信息做手動的判斷也可以模擬出類似重載的效果。而在javascript中根本就不需要什么params關鍵字,就可以很自然的實現任意個數參數的傳遞。function中有個arguments屬性,可以把它看成一個數組,它按傳遞進來的參數的順序來保存所有的參數。也就是說我們在定義方法時可以不聲明參數名。

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來模擬一下重載。

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

function Increase(arg) { if (typeof arg == "undefined") { alert("請輸入參數"); } if (typeof arg == "string") { alert(String.fromCharCode(arg.charCodeAt(0) + 1)); } if (typeof arg == "number") { alert(arg + 1); } }; Increase(); Increase("a"); Increase(1); 基于參數類型不同的重載。
函數除了有名函數之外也可以是匿名函數,匿名函數就是沒有名子的函數,不論函數有名還是沒有名子,都是一個完整的函數對象。匿名函數還是用function來聲明,但不用為它指定名稱。其它的方面,比如參數等等和有名函數沒什么區別。

function() { …… }; 匿名函數一般可以滿足臨時的函數需求,不需要有變量對其進行引用(有名的函數可以認為是有變量引用的函數)。比如需要一個函數做為值對象做為參數傳入方法、需要編程的方式為對象添加事件,用匿名函數都可以很好的完成。當然你也可以單獨聲明變量來引用某個匿名函數對象,這和普通有名函數就沒什么區別了。

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); }); 上面代碼執行,依次輸出數組中的元素。

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

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

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

var student = { Name: "張三", Age: 20, Introduce: function() { alert("我叫" + this.Name + ",今年" + this.Age + "歲了!"); } }; window.onload = (function(obj) { return function() { obj.Introduce(); }; })(student); 因為javascript中函數的這些特點加之它的對象的特征,我們還可以寫出一些有functional意味的程序出來。其實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)); 下面這又是什么呢?是方法嗎?是類嗎?

function Point() { };

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 成人精品第一区二区三区 | 欧美日本综合 | 中文国产成人精品少久久 | 色人阁色五月 | 国产一区免费在线观看 | 日韩欧国产精品一区综合无码 | freexxx性欧美hd | 在线免费午夜视频 | 小说区图片区综合视频区 | 欧美刺激午夜性久久久久久久 | 羞羞免费网站 | 精品久久久久久中文字幕一区 | 国产成人a一区二区 | 一级毛片aaaaaa视频免费看 | 国产一区二区三区成人久久片 | 国产综合视频在线观看 | 久久精品国产2020 | 18一19xxx日本护士 | 日韩色综合 | 精品九九九 | 亚洲综合网在线观看 | 亚洲日本中文字幕在线 | 亚洲精品国产福利在线观看 | 亚洲跨种族黑人xxx 亚洲老女人 | 色综合久久久久久久久五月 | 欧美高清在线视频在线99精品 | 国产精品一区二区三区四区 | 久草福利在线视频 | 亚洲精品一区二区三区在线看 | 欧美α一级毛片 | 欧美一区二区三区四区在线观看 | 欧美羞羞视频 | 欧美一级特黄毛片视频 | 伊人免费 | 在线观看中文字幕国产 | 毛色毛片免费观看 | 国产18在线 | 天天躁夜夜燥2021 | 最新在线观看精品国产福利片 | 国产视频一二 | 日韩看片网站 |