2013-05-22 10 views
5

call()またはapply()から呼び出されたときに関数の戻り値を取得する方法はありますか?JavaScriptでcall()またはapply()を使用した戻り値

私のシナリオ:

私はapply()機能を正常に動作機能を持っています。オブジェクトのメソッド内のループで

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

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

そしてMakeNames機能:

VAR name滞在空の原因 applyはいずれも返さない
function MakeNames(data) 
{ 
    return data.FirstName + " " + data.LastName; 
} 

オブジェクトのコンストラクタで関数からの値。関数が呼び出され、引数が正常に渡されたと確信しています。 name = MakeNames(data[i]);を直接使用するように言わないでください。なぜなら、私はこの解決策が欲しくないからです。

applycallなどが問題ではありません。動作している場合はJavaScriptが必要です。

どうすればこの問題を解決できますか?

+0

私にとっては戻り値が正常に機能します。これをブラウザコンソール 'var x =" huh ".toString.apply(" test ");' xを "test"に設定してください。 –

+1

が適用され、呼び出しによって値が返されます。他の何かが間違っている必要があります。呼び出す関数を公開しているコードをさらに提供できますか?また、toStringは何をしていますか?あなたの関数名は、あなたの例ではすでに文字列です。 – Tim

+0

@ ben336申し訳ありませんが、あなたのポイントを理解することはできません。より正確な回答を投稿できますか? – DontVoteMeDown

答えて

11

の結果:唯一の違いはこのの値であるため、

MakeNames(data[i]) 

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

がようまったく同じですのMakeNamesファンクションで、からこのは使用されていませんが、何の違いもありません。 の適用を使用しても、関数が値を返すかどうか、または値が何であるかは変わりません。

あなたが持っている問題は、投稿されたコードの(ビット数)ではありません。

+1

あなたは正しいですね。このコードは問題ありません。私には恥ずべき。ありがとう、あなた。 – DontVoteMeDown

0

dataが設定されている、またはdata[i]プロパティFirstNameLastNameを持つオブジェクトだろうどこどこ私はあなたのコードでは表示されません。フェイルオーバーしてみてください。

function MakeNames(data) { 
    return (data.hasOwnProperty('FirstName')) ? data.FirstName + " " + data.LastName : 'John Doe'; 
} 
関連する問題