2011-07-19 43 views
0

我怎麼能傳遞動態參數的函數,如的javascript:返回動態值作爲參數

var customvar = 1; //example 

    function iLike(){ 

     console.log("you like ... (i know how to recieve the arguments!)") 
    } 

    function getDrink(){ 

     return (customvar == 1 ? ('pepsi','cola') : ('drpepper')); 
    } 

    iLike('peanuts', 'pizza', getDrink()); 

    iLike('peanuts', 'pizza', 'pepsi', 'cola'); // = result 

如何從getDrink通過參數()正確 - 我只做收到「可樂」但不是'百事可樂'。

謝謝:)

+1

我猜你在這裏(不是參數)需要關於「返回值」,請確認。 –

+0

我已編輯帖子主題 – mate64

回答

1

如果你想getDrink返回包含'pepsi''cola'那麼語法一個數組['pepsi', 'cola']

我不太清楚,如果這就是你想要的東西......

請注意,這仍然會給你:

iLike('peanuts', 'pizza', ['pepsi', 'cola']) 

三個參數,其中的拉st是一個數組,而不是四個參數。

如果你想iLike與四個弦參數調用,則可能需要調用它是這樣的:如果你

function iLike(){ 
    var args = Array.prototype.slice.call(arguments); //convert to real array 
    console.log('I like '+args[0]+', '+args[1]+' and '+args[2]); 
} 

function getDrink(){ 
    return (customvar == 1 ? ['pepsi','cola'] : ['drpepper']); 
} 

iLike.apply(this, ['peanuts', 'pizza'].concat(getDrinks())) 
+0

我已重新編輯我的問題。我想收到getDrink()像參數。這可能嗎 ? – mate64

1

您可以使用該arguments對象想從getDrink返回'百事可樂'以及'可樂'(在1個變量中),您可以使用一個數組:

function getDrink(){ 
     return (customvar == 1 ? ['pepsi','cola'] : 'drpepper'); 
} 
+0

謝謝你Koolinc! +1 – mate64

1

解決方案是使用數組,並使用apply

var customvar = 0;  

function iLike() { 
    console.log(arguments); 
} 

function getDrink() { 
    return (customvar == 1 ? ["pepsi", "cola"] : ["drpepper"]); 
} 

iLike.apply(this, ["peanuts", "pizza"].concat(getDrink())); 
// ["peanuts", "pizza", "drpepper"] 
+0

謝謝八月! +1 – mate64

3

如果你想發送的參數的動態數量,使用apply功能:如果您要訪問的所有參數

getDrink.call(this, 'pepsi', 'cola'); 
getDrink.call(this, 'pepsi', 'cola', '7up'); 

getDrink.apply(this, ['pepsi', 'cola']); 
getDrink.apply(this, ['pepsi', 'cola', '7up']); 

您還可以使用call功能在功能上你可以使用arguments array

function getDrink() { 
var first = arguments[0]; //pepsi 
var secon = arguments[1]; //cola 
}