JavaScript: возвращать динамические значения в качестве аргументов - PullRequest
0 голосов
/ 19 июля 2011

как я могу передать динамические аргументы в функцию , например,

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 () - я получаю только получение«Кола», но не «Пепси».

спасибо:)

Ответы [ 4 ]

3 голосов
/ 19 июля 2011

Если вы хотите отправить динамическое число аргументов, используйте функцию apply:

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

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

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

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

function getDrink() {
var first = arguments[0]; //pepsi
var secon = arguments[1]; //cola
}
1 голос
/ 19 июля 2011

Для этого можно использовать объект 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');
}
1 голос
/ 19 июля 2011

Решение состоит в том, чтобы работать с массивами и использовать 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"]
1 голос
/ 19 июля 2011

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

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

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

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

Три аргумента, из которых последним является массив, а не четыре аргумента.

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

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

iLike.apply(this, ['peanuts', 'pizza'].concat(getDrinks()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...