2012-04-05 181 views
3

如何傳遞一個函數的所有參數到另一個將一個函數的所有參數傳遞給另一個函數?

function a(){ 
    arguments.length;// this is 1 
    // how do I pass any parameter function a receives into another function 
    b(what to put here?); // say pass all parameters function a receives to function b 
} 
a('asdf'); // this is okay 

因此,如果功能的接收參數X號(JavaScript)的,每一個參數,然後傳遞到函數b以相同的順序。所以如果一個(「1」,「2」); ,b(「1」,「2」);如果a(「1」,2,[3]); ,b(「1」,2,[3]);.

回答

5

使用Function.prototype. apply(thisArg[, argsArray]),像這樣:

b.apply(this, arguments); 

現在,arguments是具有一些其它性質類似陣列的對象(如callee)除了其正索引屬性。因此,您可能應該使用Array.prototype. slice()將對象轉換爲一個簡單的參數數組(儘管兩者都可以在現代環境中使用)。

b.apply(this, Array.prototype.slice.call(arguments)); 

參見:Function.prototype. call()

2

爲什麼不將它們作爲一個單獨的對象?使用單個對象作爲參數的優點是,

  • 訂單是沒有必要的。不像其他論據,你必須知道它是接收集合中的第一,第二,第三,在對象中,它們就在那裏。在你需要時給他們打電話。
  • 你從不擔心有多少人通過。您可以發送一個對象包含很多的屬性 - 你只能通過主叫方和被叫方

ofcourse之間的一個說法,你必須使用

function foo(data){ 
    data.param1; //is foo 
    data.param2; //is bar 
    data.param3; //is baz 

    //send params to bar 
    bar(data); 
} 

function bar(info){ 
    info.param1; //is foo 
    info.param2; //is bar 
    info.param3; //is baz 
} 

//call function foo and pass object with parameters 
foo({ 
    param1 : 'foo', 
    param2 : 'bar', 
    param3 : 'baz' 
}) 
+0

當相同的功能之前對它們進行測試,如果他們存在是由瀏覽器JavaScript內部提供的,那麼爲什麼又要擔心。此外,可以使用切片和拼接功能進行更改:http://stackoverflow.com/questions/3914557/passing-arguments-forward-to-another-javascript-function – iMatoria 2012-09-27 02:51:55

+0

我認爲命名參數是一種更好的範例,但是在JavaScript中,內置的方式是編號的,至少在ES5中是這樣。因此,僅僅簡單地傳輸參數而不是打包和解包對象會更直觀。當然,有些情況可能需要對象技術。 – Beejor 2015-11-11 23:36:02

+0

@Beejor,我相信這在2012年得到了回覆,並且已經選擇了一個更好的答案。 – Joseph 2015-11-12 00:30:52

相關問題