2011-07-19 2 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() правильно - Я только не Получать «колу» но не «pepsi».

спасибо :)

+1

Я думаю, что вы берете «возвращаемое значение» здесь (а не аргументы), пожалуйста, подтвердите. –

+0

я отредактировал эту тему – mate64

ответ

1

Если вы хотите getDrink возвращает массив, содержащий 'pepsi' и 'cola' то синтаксис будет ['pepsi', 'cola']

Я не совсем уверен, что это то, что вы хотели ...

Обратите внимание, что это будет еще дать вам:

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

Три аргумента, из которых ла st - это массив, а не четыре аргумента.

Если вы хотите iLike называться с четырьмя строковых аргументов, вы можете назвать это так:

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

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

Я пересмотрел свой вопрос. Я хочу получить getDrink() как аргументы. Это возможно ? – mate64

1

Вы можете использовать arguments объект для этого:

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

Если вы хотите вернуть «pepsi», а также «cola» (в 1 переменной) от getDrink, вы можете использовать массив:

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.apply(this, ['pepsi', 'cola']); 
getDrink.apply(this, ['pepsi', 'cola', '7up']); 

Вы также можете использовать call функции:

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

Если вы хотите получить доступ всех аргументов в функции u можно использовать arguments массив

function getDrink() { 
var first = arguments[0]; //pepsi 
var secon = arguments[1]; //cola 
} 
Смежные вопросы