2010-08-12 22 views
7

là có thể chuyển nhiều đối số bằng cách sử dụng một biến không? Ví dụ: nếu tôi muốn làm một việc gì đó như:Javascript: chuyển nhiều đối số dưới dạng một biến duy nhất

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

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

Ví dụ trên là một ví dụ đơn giản về những gì tôi đang cố gắng làm. Nó không hoạt động (vì "thanh" được phát hiện như một đối số). Tôi biết rằng có những cách dễ dàng hơn để thực hiện điều này bằng cách sử dụng mảng.

Vì vậy, tôi đặt câu hỏi này chủ yếu là do tò mò - có thể biến biến "thanh" thành không chỉ một, mà là 2 đối số?

Cảm ơn!

+0

Chủ đề liên quan: Từ khóa 'đối số' cho bạn biết args được chuyển đến hàm. Ví dụ: function a() {alert (arguments [1])}; a (1, 2); Điều này sẽ cảnh báo ('2'); – Topera

Trả lời

0

Bạn có thể sử dụng này:

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

Những gì bạn đang yêu cầu là không thể. Nếu bạn muốn chuyển nhiều giá trị trong một đối số, hãy sử dụng một số Array hoặc Object. Nếu bạn thực sự phải sử dụng chuỗi, bạn sẽ phải gọi split() để ngắt chuỗi đối số thành một mảng.

0

Không, nhưng bạn có thể vượt qua một một mảng hoặc đối tượng:

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

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

Không thực sự.

Bạn có thể làm:

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

(Áp dụng cho phép bạn vượt qua một mảng các đối số thay vì mỗi đối số riêng)

... nhưng cụm từ "xấu xí" nói đến cái tâm.

+1

Có sự phân chia của chuỗi là xấu xí, cũng đề cập đến 'foo' bằng cách sử dụng' window.foo' là xấu xí. Tuy nhiên, việc sử dụng 'function.apply' không phải là! – adamse

0

Không, không thể. Bạn có thể đặt hai đối số trong một mảng, nhưng một mảng vẫn là một biến. Sau đó, bạn sẽ cần phải viết lại các chức năng để chấp nhận một biến, và đối xử với nó như một mảng, như thế này:

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

Về cơ bản, một chức năng chấp nhận biến như các đối số và không có vấn đề gì loại biến bạn vượt qua nó, mỗi biến vẫn chỉ là một biến - không có cách nào để có được một biến duy nhất được nhận dạng dưới dạng nhiều đối số. Một mảng là một biến, một đối tượng JSON là một biến, vv Những thứ này có nhiều phần với chúng, nhưng chúng được đóng gói bởi một biến duy nhất.

0

Chắc chắn, đây là thông thường để vượt qua một đối tượng cho các tùy chọn

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

sau đó bạn có thể vượt qua trong bất cứ điều gì ...

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 

Thường thì những được định nghĩa nội tuyến, đặc biệt là nếu các giá trị không cần thiết bên ngoài cuộc gọi phương thức.

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

Bỏ phiếu bầu, không có mô tả về những gì bạn đang làm. –

-1

Để trả lời trực tiếp câu hỏi của bạn, không. Cần lưu ý rằng cách bạn có bar được xác định chỉ có một giá trị, một chuỗi có chứa "0,10".

+0

Hãy bình luận khi bạn không thực sự có mã số hữu ích. –

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

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

chiều dài thay đổi danh sách đối số:

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

tham khảo: apply method (Function object)

+0

bỏ phiếu, không có chi tiết về những gì bạn đang làm. –

+0

Cảm ơn, nó đã làm việc với tôi :) –

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

myFunction(1,'text') 

hoặc ...

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

Có một bài viết về vấn đề here.

+1

Đó là sử dụng 2 đối số mặc dù, không 1 như OP yêu cầu. – mdm

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