2013-05-22 20 views
5

Çağrının() veya çağrıldığında() çağrıldığında işlevin dönüş değerini almanın bir yolu var mı?Dönüş değeri ile çağırma() veya apply() JavaScript içinde

Benim senaryo:

Ben apply() fonksiyonu ile çalışıyor bir işlevi vardır.

var someObject = new SomeObject({NameFunction: "MakeNames"}); 
nesnenin yönteminde bir döngü üzerinde

:

var name = ""; 
for (var i = 0; i < data.length; i++) { 
    name = window[this.NameFunction].apply(null, [data[i]]); 
} 

Ve MakeNames fonksiyonu: Nesne işinin müteahhidi olarak

function MakeNames(data) 
{ 
    return data.FirstName + " " + data.LastName; 
} 

var name kalmak boş nedeni apply herhangi dönmez o Fonksiyondan değer. Fonksiyonun çağrıldığından ve argümanın başarılı bir şekilde iletildiğinden emin olduğumu unutmayın. Lütfen bana bu çözümü istemediğim için name = MakeNames(data[i]);'u kullanmamı söyleme.

apply, call ya da JavaScript'in çalışması için ne varsa yapması önemli değil.

Bunu nasıl başarabilirim?

+0

Dönüş değerleri benim için iyi çalışıyor. Bunu tarayıcı konsolunda çalıştıran "var x =" huh ".toString.apply (" test ");' x'i benim için "test" olarak ayarlayın. –

+1

geçerlidir ve çağrı değerleri döndürür. Başka bir şey yanlış olmalı. Aramaya çalıştığınız işlevi açığa çıkaran koddan daha fazlasını temin edebilir misiniz? Ayrıca toString ne yapıyor? İşlev adınız örneğinizde zaten bir dizedir. – Tim

+0

@ ben336 Üzgünüm dostum, senin noktanı anlayamıyorum. Daha doğru bir cevap gönderebilir misin? – DontVoteMeDown

cevap

11

sonuç: Bir fail-over deneyin

window[this.NameFunction.toString()].apply(null, [data[i]]) 

olduğunu tam olarak aynı olarak:

MakeNames(data[i]) 

tek fark bu değeridir beri MakeNames işlevinde ve bu yana kullanılmıyor, fark yaratamaz. 'un parametresinin kullanılması, fonksiyonun bir değer döndürüp döndürmediğini veya değerin ne olduğunu döndürmez. Sahip ne olursa olsun sorun

, bu kodu yayınlanmıştır (bit) değil.

+1

Allah kahretsin haklısın. Bu kod tamam, sorun bunun dışında. Utanmalısın üzerimde. Teşekkür ederim dostum. – DontVoteMeDown

0

Ben data ayarlanır veya data[i] özelliklerini FirstName ve LastName sahip bir nesne nerede olacağını Kodunuzdaki görmüyorum. arasında

function MakeNames(data) { 
    return (data.hasOwnProperty('FirstName')) ? data.FirstName + " " + data.LastName : 'John Doe'; 
}