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

文章分類

文章標籤