5

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機能:

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

その varnameが空の原因であるapplyと、関数から値が返されません。関数が呼び出され、引数が正常に渡されたと確信していることに注意してください。name = MakeNames(data[i]);私がこの解決策を望んでいないことは明らかなので、直接使用するように言わないでください。

applyそれが であるかどうか、callまたはこれを機能させるために必要な JavaScript が何であれ、機能するかどうかは問題ではありません。

どうすればこれを達成できますか?

4

2 に答える 2

13

結果として:

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

は次とまったく同じです:

MakeNames(data[i])

唯一の違いはMakeNames関数のthisの値であり、 thisは使用されていないため、違いはありません。applyを使用しても、関数が値を返すかどうか、または値が何であるかは変わりません。

どんな問題があっても、投稿されたコード (の一部) にはありません。

于 2013-05-22T13:08:11.770 に答える
0

dataあなたのコードでは、 が設定されている場所、またはプロパティとdata[i]を持つオブジェクトがどこにあるのかわかりません。フェイルオーバーを試してください:FirstNameLastName

function MakeNames(data) {
    return (data.hasOwnProperty('FirstName')) ? data.FirstName + " " + data.LastName : 'John Doe';
}
于 2013-05-22T13:05:20.207 に答える