Core Object – 函式物件(Function Object)
函式物件(Function Object)
| Function 物件 | 兼容性:IE3+、NN2+、Moz1+、Safari1+ |
funcName = new Function (arg1, ... argN, funcBody) funcName = new Function(funcName)funcName:函式物件的名稱 arg1, ... argN:函式的參數 funcBody:函式的內容(主體)
| 屬性 | arguments、constructor、length、 prototype |
| 方法 | apply、call、toString、valueOf |
內建的函式物件是指定 JS 程式碼字串來作為函式的編譯。
JS 如果用一種結構來表示其 Script 中的過程、子程式或者是函式;像這樣的結構,我們可以將它稱之為 custom function,也就是「自定義函式」。
當我們在引用函式的時候,倘若不需要傳遞給它任何資料訊息,括號 () 中就可以為空。
//建立一個 myRect 函式 //width 與 height 為其參數,return width * height 則是該函式的內容 var myRect = new Function(width, height, "return width * height"); var width = 4; //將數值 4 指派給變數 width var height = 5; //將數值 5 指派給變數 height //呼叫 myRect 函式並將兩個參數值傳入到函式計算 // myRect 函式將兩個參數值計算後傳回函式呼叫處 document.write(myRect(width, height)); //結果顯示 20
| arguments 屬性 | 兼容性:IE4+、NN3+、Moz1+、Safari1+ |
funcName.arguments.length 參數傳遞的數量 funcName.arguments[i] 參數的索引編號
當一個函式取得引用函式語句所傳來的參數時,這些參數將指派給函式物件一個參數屬性。該屬性的值是陣列的型態,其索引值是從 0 開始。
任何類型的值都可以作為參數,它可以是數值、字元串、布林值或者是物件的引用等等。
function myCheck() {
document.write("函式的參數總量:" + myCheck.arguments.length); //結果為 4
document.write("索引編號為3的值:" + myCheck.arguments[3]); //結果為 arg4
}
myCheck("arg1","arg2","arg3","arg4");
| apply call 方法 | 兼容性:IE5.5+、NN6+、Moz1+、Safari1+ |
funcName.apply(this, arguments) 傳遞所有的參數來呼叫(存放在陣列 arguments 中的參數) funcName.call(this, arguments) 傳遞指定的參數來呼叫(存放在 this 後的參數)
//範例一
function myFunc1(a,b) { //myFunc1 函式
this.value1 = a;
this.value2 = b;
}
function myFunc2(a,b,c,d) { //myFunc2 函式
this.value3 = c;
this.value4 = d;
myFunc1.apply(this, arguments); //傳遞 myFunc1 的所有參數至 myFunc2
}
var myObj = new myFunc2(1,2,3,4);
//myObj.value1 為 1 myObj.value4 為 4
document.write(myObj.value1 + myObj.value4); //結果顯示為 5
//範例二
function myFunc1(a) { //myFunc1 函式
this.value1 = a;
}
function myFunc2(a,b) { //myFunc2 函式
this.value2 = b;
myFunc1.call(this, 91); //傳遞 myFunc1 指定的參數至 myFunc2
}
var myObj = new myFunc2(1,9);
//myObj.value1 為 91 myObj.value2 為 9
document.write(myObj.value1 + myObj.value2); //其結果為 100