2009-11-25 24 views

Trả lời

41

Sử dụng apply().

var strings = ['one','two','three']; 

someFunction.apply(null, strings); // someFunction('one','two','three'); 

Nếu chức năng của bạn quan tâm đến phạm vi đối tượng, vượt qua những gì bạn muốn this được thiết lập để như là đối số đầu tiên thay vì null.

+0

Ngoài ra, 'null' không phải là thông số hợp lệ để gọi hoặc áp dụng trong ES5. –

+1

Null là một đối số hợp lệ cho es5, và trong es3 nó được thay thế bởi đối tượng toàn cục. Có thể có một số khác biệt thực hiện nhưng null là hợp lệ https://esdiscuss.org/topic/function-prototype-apply-function-prototype-call-with-undefined-or-null-as-thisarg –

11

Giải pháp khá đơn giản, mỗi hàm trong JavaScript có một phương thức được liên kết với nó, được gọi là "áp dụng", lấy đối số bạn muốn chuyển vào dưới dạng mảng.

Vì vậy:

var strings = ["one", "two", "three"]; 
someFunction.apply(this, strings); 

Các 'này' trong áp dụng chỉ ra phạm vi, nếu nó chỉ là một chức năng trong trang mà không một đối tượng, sau đó đặt nó để null, nếu không, vượt qua phạm vi mà bạn muốn phương pháp có khi gọi nó.

Đổi lại, bên trong someFunction, bạn sẽ viết một cái gì đó mã của bạn như thế này:

function someFunction() { 
    var args = arguments; // the stuff that was passed in 
    for(var i = 0; i < args; ++i) { 
    var argument = args[i]; 
    } 
} 
+0

Lưu ý rằng chỉ tham chiếu | đối số | sẽ làm chậm quá trình thực thi JavaScript của bạn trong hầu hết các trình duyệt (tất cả?). – sdwilsh

+2

Đây là một ví dụ, không phải là một bài tập điều chỉnh hiệu suất. – Michael

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