2010-08-12 41 views
7

birden fazla argümanı geçmek mümkün mü? Ben böyle bir şey yapmak istiyorsa Örneğin,:Javascript: Tek bir değişken kullanarak birden çok bağımsız değişkeni tek bir değişken olarak geçirme

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

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

Yukarıdaki örnek benim yapmaya çalıştığım şeyin bir basitleştirilmiş bir örnektir. Bu işe yaramaz (çünkü "bar" tek bir argüman olarak algılanır). Bunu, dizileri kullanarak uygulamak için daha kolay yollar olduğunu biliyorum. Bu soruyu çoğunlukla meraktan çıkardım - "bar" değişkeninin bir değil, 2 argüman olarak algılanması mümkün mü?

Teşekkürler!

+0

İlgili konu: 'Argümanlar' anahtar sözcüğü, fonksiyona gönderilen hataların olduğunu söyler. Örneğin: function a() {alert (arguments [1])}; bir (1, 2); Bu uyarı ('2'); – Topera

cevap

0

Bu kullanabilirsiniz: Eğer sorduğun Ne

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

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

var bar = {x:0, y:10}; 
foo(bar); 
4

imkansızdır. Tek bir bağımsız değişkende birden çok değer geçirmek istiyorsanız, Array veya Object kullanın. Gerçekten bir bir dize kullanmanız gerekiyorsa, argüman dizgisini bir diziye bölmek için split()'u aramanız gerekir.

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

var bar = {x: 0, y:10}; 
0

Hayır, ancak bir dizi veya nesne geçebileceği.

Sen yapabilirdi:

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

(Uygula Eğer ifade dizi yerine ayrı ayrı argüman geçmesine izin verir) ... ama ifade "çirkin" akla gelir.

1

Gerçekten:

+1

Evet, dizenin bölünmesi çirkin, '' foo '' window.foo' kullanarak çirkin. Ancak 'function.apply' kullanımı değil! – adamse

0

Hayır, bu mümkün değil. Bir diziye iki argüman koyabilirsiniz, ancak bir dizi hala bir değişkendir. Sonra bir değişken kabul etmek fonksiyonunu yeniden yazmak gerekir, ve bu gibi bir dizi olarak tedavi:

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

Temel olarak bir işlev parametresi olarak değişkenleri kabul eder ve olursa olsun geçmek değişkenin ne tür her değişken hala tek değişkenlidir - tek bir değişkenin birden fazla argüman olarak tanınması için bir yol yoktur. Bir dizi bir değişkendir, bir JSON nesnesi bir değişkendir, vs. Bu şeylerin kendileri için birden fazla parçası vardır, ancak bunlar tek bir değişken tarafından kapsüllenir.

0

Tabii, bu değerler değildir, özellikle eğer

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 

Genellikle bu inline tanımlanır ... seçenekleri

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

hiçbir şeye geçebilir için bir nesne geçmesine yaygındır yöntem çağrısı dışında gerekli.

foo({'x':5,'y':23,'border':3}); 
+0

Aşağı oy, ne yaptığınız hakkında açıklama yok. –

-1

doğrudan hayır, sorunuzu cevaplamak için. bar'un yolunun sadece bir değer olduğunu, "0,10" içeren bir dizgi tanımladığını belirtmek gerekir.

+0

Lütfen gerçekten yararlı bir kodunuz olmadığında yorum yapın. –

3
function Add (a, b, c) { 
    return a + b + c; 
} 

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

sayısı değişken listesi:

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); 

Referans: apply method (Function object)

+0

aşağı oy, ne yaptığınız hakkında hiçbir bilgi. –

+0

Teşekkürler, benimle çalıştı :) –

-2
function myFunction(a,b){ 
//do stuff with a and b here 
} 

myFunction(1,'text') 

ya ...

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

konuyla here üzerine bir makale var.

+1

Bu OP talep olarak 1 değil, 2 argümanlar kullanıyor. – mdm

İlgili konular