2013-05-22 4 views
5

Gibt es eine Möglichkeit, den Rückgabewert der Funktion zu erhalten, wenn sie von call() oder apply() aufgerufen wird?Gibt Werte mit call() oder apply() in JavaScript zurück

Mein Szenario:

Ich habe eine Funktion, die mit apply() Funktion einwandfrei funktioniert. Auf Objekt contructor:

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

auf einer Schleife in dem Objekt der Methode:

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

Und die MakeNames Funktion:

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

Der var name Aufenthalt leer Ursache apply kehrt nicht jeder Wert von der Funktion. Beachten Sie, dass die Funktion sicher aufgerufen wird und das Argument erfolgreich übergeben wird. Bitte sagen Sie mir nicht direkt name = MakeNames(data[i]); zu verwenden, weil es offensichtlich ist, dass ich diese Lösung nicht möchte.

Es spielt keine Rolle, ob es apply, call oder was auch immer JavaScript hat, um dies zu arbeiten, funktioniert, wenn es funktioniert.

Wie kann ich das erreichen?

+0

Rückgabewerte funktionieren für mich ok. Führen Sie dies in der Browser-Konsole 'var x =" huh ".toString.apply (" test ");' setze x auf "test" für mich. –

+1

anwenden und Aufruf wird Werte zurückgeben. Etwas anderes muss falsch sein. Können Sie mehr Code bereitstellen, der die Funktion, die Sie aufrufen möchten, offengelegt hat? Was macht toString? Ihr Funktionsname ist in Ihrem Beispiel bereits eine Zeichenfolge. – Tim

+0

@ ben336 Sorry, du kannst deinen Standpunkt nicht verstehen. Können Sie eine genauere Antwort posten? – DontVoteMeDown

Antwort

11

Das Ergebnis:

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

ist genau die gleiche wie:

MakeNames(data[i]) 

da der einzige Unterschied der Wert von ist dies in der MakeNames Funktion, und seit diese wird nicht verwendet, es kann keinen Unterschied machen. Die Verwendung von gilt ändert nicht, ob die Funktion einen Wert zurückgibt oder nicht, oder was der Wert ist.

Was immer Sie haben, ist es nicht in den (Bits von) geposteten Code.

+1

Gott verdammt, du hast Recht. Dieser Code ist in Ordnung, das Problem liegt außerhalb. Schande über mich. Danke mann. – DontVoteMeDown

0

ich nicht in Ihrem Code sehen, wo data gesetzt ist, oder wo data[i] würde ein Objekt sein, das die Eigenschaften FirstName und LastName hat. Versuchen Sie, ein Fail-Over:

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