一、什麼是arguments
arguments 是是JavaScript裡的一個內建對象,它很古怪,也經常被人所忽視,但實際上是很重要的。所有主要的js函數庫都利用了arguments物件。所以agruments物件對於javascript程式設計師來說是必需熟悉的。
所有的函數都有一個屬於自己的一個arguments對象,它包含了函所要呼叫的參數。他不是一個數組,如果用typeof arguments,回傳的是'object'。雖然我們可以用呼叫資料的方法來呼叫arguments。例如length,還有index方法。但數 組的push和pop物件是不適用的。
二、創建一個靈活的函數
看起來貌似argument物件使用起來十分有限,但是實際上它是一個非常有用的物件。你可以透過使用argument物件讓函數能夠呼叫數量不定 的參數。在Dean Edwards的base2函式庫裡有個格式化的函數,展現了這個彈性。
function format(string) { var args = arguments; var pattern = new RegExp(“%([1-" + arguments.length + "])”, ”g”); return String(string).replace(pattern, function(match, index) { return args[index]; }); };
我們提供了一個模板字串,你可以用”%1”到“%9”為返回值添加一個佔位符。然後提供給九個其他參數插入。
format(“And the %1 want to know whose %2 you %3″, ”papers”, ”shirt”, ”wear”);
上面的程式碼會回傳:And the papers want to know whose shirt you wear" .
有件事情我們需要注意下,在定義函數的時候,我們只規定了一個參數,string。Javascript允許我們傳遞任何數量的參數到一個函數裡,不管怎麼定義這個函數。輕易的把它轉換成標準的數據,然後進行數組操作。允許我們去執行所有類型的javascript方法。提供了匿名函式呼叫時所附帶的參數。規定的方法。物件。 format函數。第一個argument,已經寫好的範本。 callee方法。
Repeat是一個承載了一個函數參考和兩個數字的函數。第一個數字是函數呼叫幾次,第二個數字是每個呼叫的間隔時間,單位是毫秒。
var args = Array.prototype.slice.call(arguments);
我有一段超級簡介的函數,承載了一個字串和執行alert方法。
function makeFunc() { var args = Array.prototype.slice.call(arguments); var func = args.shift(); return function() { return func.apply(null, args.concat(Array.prototype.slice.call(arguments))); }; }
var majorTom = makeFunc(format, ”This is Major Tom to ground control. I'm %1.”);
調用了somethingWrong函數的結果就是複這個動作三次,每次alert間隔2秒鐘。
Arguments雖然不是經常用到,有點古怪,但是,它充滿了驚喜,非常值得我們去了解 。