1. 程式人生 > 其它 >函式呼叫與封裝

函式呼叫與封裝

一、函式呼叫 構成函式的js程式碼在定義的時候,並不會執行,只有呼叫該函式的時候,它們才會執行,呼叫函式有4種方法: ²作為函式呼叫 ²作為方法呼叫 ²作為建構函式 //最後兩個不做為現階段需要掌握的內容介紹。 ²通過它們的call()和apply()方法間接呼叫 1.作為函式呼叫: 呼叫函式表達(或者函式宣告)式可以進行普通的函式呼叫。 var a = 10,b = 20; var add=function(){ var c = a+b; return c; } console.log(add()); 函式宣告: var a = 10,b = 20; function add(){ var c = a+b; return c; } 2.方法呼叫 函式和方法本質上是一類東西,只不過函式是屬於全域性物件window的方法,他可以直接用函式名進行呼叫;而其它物件的方法,則不可以這樣呼叫,只能被物件進行呼叫。 觀察上面的事例,無論是函式宣告還是函式表示式,都可以被全域性物件window呼叫實現: console.log(window.add()); console.log(add()); //兩種呼叫方式,展示出的結論是一樣的,充分證明宣告的函式就是window物件的方法。 但是,屬於其它物件的方法,就不能單獨使用名稱呼叫: var arr = []; var a = 10,b = 20; arr.add = function(){//add方法此時屬於arr物件 var c = a+b; return c; } console.log(arr.add());//其它物件的方法,只屬於這個物件,只能被這個物件呼叫 console.log(add());//報錯,單獨呼叫不可以 console.log(window.add());//其它物件也無法呼叫 注意:哪怕生成兩個值一模一樣的物件,但是他們也不是同一個東西,他們的方法不能互相呼叫,只屬於自己。 var arr1 = []; var arr2 = []; var a = 10,b = 20; arr1.add = function(){ var c = a+b; return c; } console.log(arr1.add()); console.log(arr2.add()); 3.方法呼叫中的方法鏈 如果一個方法的返回值是物件,那麼這個返回值依然可以呼叫它自己的方法,形成方法的鏈式呼叫。 var jim = { name:"jim", age:15, myName:function (){ return jim.name; } } var student = { 1001:jim, stu : function(){ return student[1001]; } } var obj = student.stu(); console.log(obj.myName()); 以上obj就是student.stu()的返回值,也就是物件jim;於是可以修改程式碼為: console.log(student.stu().myName()); 二、函式封裝 1.函式封裝概念 函式封裝是一種函式的功能,它把程式設計師寫的一個或者多個功能通過函式的方式封裝起來,對外只提供一個簡單的函式介面(其實所說介面就是方法)。 比如說,陣列遍歷: var arr = [1,2,3,4,5]; for (var i = 0; i < arr.length; i++) { console.log(arr[i]) } 以上寫法只能實現一個數組的遍歷,當我們有很多陣列需要遍歷的時候,只能複製for迴圈,重寫程式碼來實現。可它們明明是一樣的程式碼,知識陣列不同,這樣會產生很大的冗餘。 於是我們可以將for迴圈封裝到一個函式中,在遇到需要陣列遍歷的時候,只要引入並呼叫這個函式即可實現任何陣列的遍歷。 var arr1 = [1,2,3,4,5]; var arr2 = [9,8,7,6,5,4]; function arrbl(arr){ for (var i = 0; i < arr.length; i++) { console.log(arr[i]) } } //遍歷arr1 arrbl(arr1); //遍歷arr2 arrbl(arr2); 這個和我們之前使用的陣列方法有異曲同工之妙,但是原理並不相同,不要混為一談。 封裝函式的三個要素; 功能、引數、返回值。 實際在運用函式封裝的過程中,有許多情況我們會設定返回值,這是一種很好的操作,當然如果不需要的話,可以不設定。 2.函式封裝事例 2.1封裝奇偶數判斷方法 function isOuShu(num){ if(num%2==0){ return true; }else{ return false; } 2.2自然數之和 function sumfromNToM(n,m){ var sum = 0; for(var i=n;i<=m;i++){ sum=sum+i; } return sum; } 2.3判斷閏年 function isLeapYear(year){ if((year%4==0 && year%100!=0)||(year%400==0)){ return true; } return false; } 2.4生成4位的驗證碼 function getFourNum(){ var str=""; for(var i=0;i<4;i++){ str += parseInt(Math.random()*10); } return str; }