2013-05-22 14 views
5

C'è un modo per ottenere il valore di ritorno della funzione quando viene chiamato da call() o apply()?Valore restituito con call() o apply() in JavaScript

mio scenario:

Ho una funzione che funziona bene con apply() la funzione. Sull'oggetto contructor:

var someObject = new SomeObject({NameFunction: "MakeNames"}); 

su un ciclo nel metodo dell'oggetto:

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

E la funzione MakeNames:

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

che var name permanenza vuoto causa apply non restituisce alcun valore dalla funzione. Nota che sono sicuro che la funzione è stata chiamata e che l'argomento è passato con successo. Per favore non dirmi di usare direttamente name = MakeNames(data[i]);, perché è ovvio che non voglio questa soluzione.

Non importa se è apply, call o qualsiasi codice JavaScript deve fare questo lavoro, se funziona.

Come posso ottenere questo risultato?

+0

i valori restituiti funzionano correttamente per me. eseguendo questo nella console del browser 'var x =" huh ".toString.apply (" test ");' imposta x su "test" per me. –

+1

apply e call restituirà valori. Qualcos'altro deve essere sbagliato. puoi fornire più del codice che espone la funzione che stai cercando di chiamare? Anche cosa sta facendo toString? il tuo nome funzione è già una stringa nell'esempio. – Tim

+0

@ ben336 Scusa amico, non capisco il tuo punto. Puoi pubblicare una risposta più accurata? – DontVoteMeDown

risposta

11

Il risultato di:

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

è esattamente lo stesso come:

MakeNames(data[i]) 

in quanto l'unica differenza è il valore di questo nella funzione MakeNames e dal questo non è utilizzato, non può fare alcuna differenza. L'utilizzo di si applica non cambia se la funzione restituisce un valore o meno, o qual è il valore.

Qualsiasi problema tu abbia, non è nel (bit di) codice pubblicato.

+1

Dio dannazione hai ragione. Questo codice è ok, il problema è al di fuori di esso. Mi vergogno. Grazie amico. – DontVoteMeDown

0

non vedo nel codice in cui è impostato data, o dove data[i] sarebbe un oggetto che ha le proprietà FirstName e LastName. Provare con un fail-over:

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