2011-02-08 38 views
8

Có cách nào để sử dụng một loại C# -like out hoặc ref bổ tham số với Javascript để làm một cái gì đó như thế này:Trả lại nhiều giá trị trong 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); 

Tôi muốn thay đổi tài liệu tham khảo của biến là tốt. Vì vậy, có, đi qua một đối số bằng cách tham khảo.

+1

vì vậy một cái gì đó như vượt qua bằng cách tham chiếu? – kjy112

+1

Tôi tin rằng một cái gì đó dọc theo dòng trở về một mảng kết hợp sẽ là cách javascript để đi, nhưng nếu bạn đang cố gắng để nhân rộng bằng cách tham khảo này có thể là thú vị: http://sirdarckcat.blogspot.com/2007/07/ chuyển-tham chiếu đến javascript.html – kloffy

+0

@kloffy rằng bài đăng trên blog có đầy đủ các lỗi và hiểu lầm - Tôi sẽ không dựa vào nó cho nhiều thứ bất kỳ – Pointy

Trả lời

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

Và bạn không cần phải xy thông số, chỉ cần gọi:

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

Bạn có thể tạo một "đối tượng" ...

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

return objOut; 
} 
0

Bạn có thể trở lại các loại phi nguyên thủy:

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

var x = blah(); 
3

Nếu bạn xác định các biến 'out' trong phạm vi toàn cầu bên ngoài nếu chức năng của bạn họ có thể được bố trí bên trong hàm với một cái gì đó như thế này:

var height1 = 0, height2 = 0; 

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

    return true; 
} 


var check = myManyReturnFunction(1,1); 

Bạn cũng có thể tạo ra một đối tượng, sau đó bạn có thể vượt qua của bạn chức năng, có thể được sửa đổi trong hàm như sau:

var myValues = {} 

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

    return True; 
} 

setValues(1, 1, myValues); 
2

Có một số cách để trả về nhiều giá trị trong JavaScript. Bạn luôn có thể quay trở lại nhiều giá trị trong một mảng:

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

Và truy cập chúng như thế này:

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

Nhưng cú pháp rất đẹp trong JavaScript 1,7 với việc bổ sung destructuring chuyển nhượng (nếu bạn đủ may mắn để nhắm mục tiêu một môi trường được đảm bảo để hỗ trợ nó (ví dụ: tiện ích mở rộng của Firefox)):

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

Một tùy chọn khác là trả về một đối tượng có chứa bạn giá trị r:

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

nào sau đó có thể được truy cập bằng tên:

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

Và tất nhiên bạn có thể làm một cái gì đó thực sự khủng khiếp như sửa đổi phạm vi toàn cầu hoặc thậm chí thiết lập các thuộc tính trên các chức năng chính:

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

f(); 

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

Đọc thêm (và nguồn của một số ví dụ sau):

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

+0

Ngắn hơn: var [a, b] = f(); –

Các vấn đề liên quan