2011-02-08 17 views
8

C'è un modo per utilizzare una sorta di C# -come out o ref modificatori di parametri con Javascript per fare qualcosa di simile:Restituzione di più valori in javascript?

function myManyReturnFunction(number1, number2, out x, out y) { 
    x = number1 * number2; 
    y = number1/number2; 

    return true; 
} 

var height1, height2 = 0; 
var check = myManyReturnFunction(1,1, out height1, out hight2); 

vorrei cambiare di riferimento della variabile pure. Quindi sì, passando un argomento per riferimento.

+1

quindi qualcosa come passare per riferimento? – kjy112

+1

Credo che qualcosa sulla falsariga di restituire un array associativo sarebbe il modo javascript per andare, ma se stai cercando di replicare il passaggio per riferimento, questo potrebbe essere interessante: http://sirdarckcat.blogspot.com/2007/07/ passando riferimento a javaScript.html – kloffy

+0

@kloffy che il post sul blog è pieno di errori e incomprensioni - non mi affiderei per nulla di tutto – Pointy

risposta

18
function myManyReturnFunction(number1, number2) { 
    return { 
     x: number1 * number2, 
     y: number1/number2 
    } 
} 

E non è necessario x e y parametri, basta chiamare:

var result = myManyReturnFunction(6, 9); 
var x = result.x; 
var y = result.y; 
3

È possibile creare un "oggetto" ...

function getObj(){ 
var objOut = new Object(); 
objOut.name = "Smith"; 
objOut.State = "Arkansas"; 

return objOut; 
} 
0

È possibile tornare tipi non primitivi:

function blah() { 
    return { name: 'john', age: 23 }; 
}; 

var x = blah(); 
3

Se si definiscono le variabili 'out' nell'ambito globale al di fuori se la funzione che può essere riassegnato all'interno della funzione con qualcosa di simile:

var height1 = 0, height2 = 0; 

function myManyReturnFunction(number1, number2) { 
    height1 = number1 * number2; 
    height2 = number1/number2; 

    return true; 
} 


var check = myManyReturnFunction(1,1); 

È possibile anche creare un oggetto, che è quindi possibile passare al vostro la funzione, che può essere modificato all'interno della funzione in questo modo:

var myValues = {} 

function setValues(num1, num2, vals) { 
    vals.x = num1 * num2; 
    vals.y = num1/num2; 

    return True; 
} 

setValues(1, 1, myValues); 
2

ci sono diversi modi per restituire più valori in JavaScript. Sei sempre stato in grado di restituire più valori in un array:

function f() { 
    return [1, 2]; 
} 

e accedervi in ​​questo modo:

var ret = f(); 
document.write(ret[0]); // first return value 

Ma la sintassi è molto più bello in JavaScript 1.7 con l'aggiunta di destrutturazione assegnazione (se siete fortunati abbastanza per essere di mira un ambiente garantito per sostenerla (ad esempio, un'estensione per Firefox)):

var a, b; 
[a, b] = f(); 
document.write("a is " + a + " b is " + b + "<br>\n"); 

Un'altra opzione è quella di restituire un oggetto letterale contenente voi valori di R:

function f() { 
    return { one: 1, two: 2 }; 
} 

che possono poi essere accessibili per nome:

var ret = f(); 
document.write(ret.one + ", " + ret.two); 

E, naturalmente, si potrebbe fare qualcosa di veramente orribile come modificare portata globale o in anche impostare sulla funzione stessa:

function f() { 
    f.one = 1; 
    f.two = 2; 
} 

f(); 

document.write(f.one + ", " + f.two); 

di più la lettura (e la fonte di alcuni di questi esempi):

https://developer.mozilla.org/en/New_in_JavaScript_1.7#Destructuring_assignment_(Merge_into_own_page.2fsection)

+0

Più corto: var [a, b] = f(); –

Problemi correlati