2010-06-25 11 views
9

argümanlarının değişken sayısını alabilen işlev çağrıları burada ruby ​​splat * gibi bir şeye ihtiyacım var. Javascript:

function foo() { 
    var result = ''; 
    for (var i = 0; i < arguments.length; i++) { 
    result += arguments[i]; 
    } 
    return result; 
} 

function bar() { 
    return foo(arguments) // this line doesn't work as I expect 
} 

bar(1, 2, 3); 

Bu "123" dönmek istiyorum, ama bunun yerine "[object Arguments]" olsun. Hangisi mantıklı geliyor. Argümanları temsil eden nesneyi geçiyor, ama argümanları bireysel olarak değil.

Herhangi bir sayıdaki bağımsız değişkenleri herhangi bir sayıda bağımsız değişkene alan başka bir işleve nasıl iletebilirim? apply yöntem ilk thisObj olduğu iki parametre alır

function bar() { 
    return foo.apply(null, arguments); 
} 

, bunun değeri this değeri olarak kullanılacaktır:

cevap

19

doğru bir apply kullanmak gerekir, başka işleve argümanlar geçmek için çağrılan işlev içinde, null veya undefined kullanırsanız, işlevin içindeki this değeri, genel nesneye başvurur.

apply'un beklediği ikinci argüman, işleve uygulanacak argümanları içeren dizi benzeri bir nesnedir.

Yukarıdaki örneği kontrol edin here.

3

Bunu deneyin return foo.apply(this,arguments). Ayrıca, foo işleviniz için sadece Array.prototype.slice.apply(arguments).join('')'u kullanabilirsiniz.