首頁  >  文章  >  web前端  >  javascript內建物件arguments詳解

javascript內建物件arguments詳解

高洛峰
高洛峰原創
2016-12-14 09:03:311556瀏覽

一、什麼是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);

Repeat函數使用了arguments.callee方法從變數self去取得一個引用,指向執行原始指令的函數。這樣,匿名函數就可以再次呼叫本身。

我有一段超級簡介的函數,承載了一個字串和執行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)));   
  };   
}

然而,我想創建一個特殊的版本,透過這個版本我可以重複這個動作三次,每次間隔2秒鐘。那麼,我們可以

var majorTom = makeFunc(format, ”This is Major Tom to ground control. I'm %1.”);

調用了somethingWrong函數的結果就是複這個動作三次,每次alert間隔2秒鐘。
Arguments雖然不是經常用到,有點古怪,但是,它充滿了驚喜,非常值得我們去了解 。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn