Function.prototype.apply 呼叫函式

Function.prototype.apply:

apply是函式物件的方法,可以用來呼叫函式,並且指定函式內 this 的值。apply方法會將原函式的參數以陣列方式表示,在ECMAScript 5中,也可以是個類似陣列的物件,譬如說Arguments物件。apply方法與call方法十分類似,差別在於call方法傳遞參數的方式是個別傳送,而apply方法則是將所有參數放在一個陣列中來傳送。

Function.prototype.apply的語法:

functionobj.apply(thisArg[, argsArray])

thisArg:用來指定函式內的this值。若被呼叫的函式是在非嚴格模式下執行,thisArg會被轉化為物件,因此若是輸入null或是undefined那函示的this會等於全域物件,若是其他原始值(primitive value),則會被包裹成為物件。在ECMAScript第五版中的嚴格模式下,thisArg會毫無改變的變成函式內的this。

argsArray:參數陣列。傳遞給函式的參數,以陣列或是類陣列物件(只在ECMAScript 5)方式表示,陣列中的第一個元素被視為函式的第一個參數,第二個元素被視為函式的第二個參數。

Function.prototype.apply的範例:

<script type="text/javascript">
function getmax(arr1,arr2){
"use strict";
document.writeln(this+"<br/>");
var y=Math.max.apply(this,arr1.concat(arr2));
document.writeln(y+"<br/>");
}
getmax.apply(null,[[4,5,6,7,8,9],[11,15,12]]);
</script>

Function.prototype.apply的範例輸出:

null  
15

Function.prototype.apply的範例說明:

1.getmax()函式內使用了嚴格模式,因此this並沒有被轉化成為全域物件(意旨在全域範圍中的this),而是原本的null值。可以嘗試把"use strict";拿掉,會有不同的結果。在瀏覽器中,null會變成[object Window]。

2.apply的第二個參數 [[4,5,6,7,8,9],[11,15,12]]是由兩個陣列組成的陣列,第一個陣列被視為getmax()的第一個參數,第二個陣列被視為getmax()的第二個參數。

3.將兩個陣列合併,並當成Math.max.apply()的第二個參數參數。

4.Math.max.apply(this,[4,5,6,7,8,9,11,15,12]) 相等於 Math.max(4,5,6,7,8,9,11,15,12)。

Function.prototype.apply的注意事項:

有時候Javascript的執行環境會對函式的輸入參數個數有所限制,因此應該注意一下。這通常不會有問題,不過如果陣列長度數以萬計,那你真的靠考慮這個潛藏的風險。

其他:

如果你想更了解其他函式觀念,可以參考看看下面這篇文章:函式 Function

我把許多函式的觀念與用法都收集在這篇文章內。

 
 

  按個讚!~支持本站!~

FB推薦載入中  

你可能會有興趣的文章