7

単一の変数を使用して複数の引数を渡すことは可能ですか? たとえば、次のようなことをしたい場合:

function foo(x,y){
    document.write("X is " + x);
    document.write("Y is " + y);
}

var bar = "0,10";
foo(bar);

上記の例は、私がやろうとしていたことの単純化された例です。機能しません (「バー」が単一の引数として検出されるため)。配列を使用してこれを実装する簡単な方法があることを知っています。

それで、私は主に好奇心からこの質問をします - 「バー」変数を1つではなく2つの引数として検出することは可能ですか?

ありがとう!

4

10 に答える 10

14
function foo(thing) {
    document.write("X is " + thing.x);
    document.write("Y is " + thing.y);
}

var bar = {x:0, y:10};
foo(bar);
于 2010-08-12T19:39:23.200 に答える
4

あなたが求めていることは不可能です。1 つの引数で複数の値を渡したい場合は、Arrayまたはを使用しObjectます。本当に文字列を使用する必要がある場合は、 を呼び出しsplit()て引数文字列を配列に分割する必要があります。

于 2010-08-12T19:39:29.343 に答える
4
function Add (a, b, c) {
    return a + b + c;
}

var nums = [1, 2, 4];
var sum = Add.apply (null, nums);

可変長引数リスト:

function Add () {
    var sum = 0;
    for (var i = 0; i < arguments.length; i++) {
        sum += arguments[i];
    }
    return sum;
}
var n = Add (1, 2, 3, 4, 5);

参考:applyメソッド(Functionオブジェクト)

于 2010-08-12T20:02:10.630 に答える
1

確かに、これはオプションのオブジェクトを渡すのが一般的です

function foo(options){
  //...
}

その後、何でも渡すことができます...

var opts = {};//create an object
opts['x'] = 5;//set whatever properties you want
opts['y'] = 23;
opts['border'] = 3;
foo(opts);//pass 1 argument, with as many values as you want

多くの場合、これらはインラインで定義されます。特に、メソッド呼び出しの外部で値が必要ない場合は特にそうです。

foo({'x':5,'y':23,'border':3});
于 2010-08-12T19:40:49.207 に答える
1

あまり。

あなたがすることができます:

window.foo.apply(window, bar.split(','));

(適用すると、各引数を個別に渡す代わりに、引数の配列を渡すことができます)

…でも「醜い」という言葉が思い浮かびます。

于 2010-08-12T19:40:15.010 に答える
0

いいえ、できません。配列に 2 つの引数を入れることはできますが、配列は 1 つの変数のままです。次に、次のように、1 つの変数を受け入れ、それを配列として扱うように関数を書き直す必要があります。

function foo(x){
document.write("X is " + x[0]);
document.write("Y is " + x[1]);
}

基本的に、関数は変数を引数として受け入れます。どのような変数を渡しても、各変数は 1 つの変数にすぎません。1 つの変数を複数の引数として認識させる方法はありません。配列は 1 つの変数、JSON オブジェクトは 1 つの変数などです。これらのものには複数の部分がありますが、1 つの変数によってカプセル化されています。

于 2010-08-12T19:40:45.877 に答える
0

これを使用できます:

var bar = [0,10]; // creates an array
foo(bar);

function foo(arg){
    document.write("X is " + arg[0]);
    document.write("Y is " + arg[1]);
}
于 2010-08-12T19:39:11.313 に答える
0

いいえ。ただし、配列またはオブジェクトを渡すことはできます。

function foo(options){
    document.write("X is " + options.x);
    document.write("Y is " + options.y);
}

var bar = {x: 0, y:10};
于 2010-08-12T19:39:39.687 に答える
-1

あなたの質問に直接答えるために、いいえ。bar定義した方法は、「0,10」を含む文字列である1つの値のみであることに注意してください。

于 2010-08-12T19:41:54.117 に答える
-2
function myFunction(a,b){
//do stuff with a and b here
}

myFunction(1,'text')

また...

<a onClick="myFunction(1,'text');"

ここに問題に関する記事があります。

于 2013-03-28T13:23:15.960 に答える