JavaScriptは - どのように私は、文字列名から関数を呼び出すと、配列オブジェクトを渡すのですか?
-
20-09-2019 - |
質問
私は、ユーザーが特定のイベントにコントロールによって呼び出され、独自のスクリプト名を提供することができますユーザーコントロールを持っています。
私は、次のコードを持っています:
initialize : function()
{
// Call the base initialize method
Point74.WebAutoComplete.callBaseMethod(this, 'initialize');
$(document).ready(
Function.createDelegate(this, this._onDocumentReady)
);
},
_onDocumentReady : function()
{
var me = this;
$("#" + me.get_id()).autocomplete(me.get_ashxAddress(),
{
formatItem: function(item)
{
return eval(me.get_formatFunction() + "(" + item + ");");
}
}
).result(me.get_selectFunction());
}
me.get_formatFunctionは機能、すなわち「FormatItem」の名前が含まれています。この例では、現在私が使用したくないのevalを、使用している...プラス、この例では、とにかく動作しませんが、私は私が取得しようとしているかを示すだろうと思ってます。
上記の例では、Iは、文字列配列である「項目」として値未定義のエラーを取得し、evalが1つの長い文字列に変換しようとします。
私は、まだ名前の関数に文字列配列として「アイテム」を通過するこの機能を実現するにはどうすればよい?
という名前の関数を渡すことは悪い考えであれば、どんな選択肢があるのですか?
これは、私のコントロールが宣言されている方法です。
<p74:WebAutoComplete runat="server" ID="ato_Test" AshxAddress="WebServices/SearchService.ashx"
FormatFunction="formatItem" SelectFunction="searchSelectedMaster" />
解決
me[me.get_formatFunction()](item);
他のヒント
は、あなたの意図は、使用するのではなく、その後、)formatItem(に渡されるユーザー指定の関数にすべての引数を渡すことである場合:
formatItem: function(item)
{
return eval(me.get_formatFunction() + "(" + item + ");");
}
使用します。
formatItem: function()
{
return me.get_formatFunction().apply(me, arguments));
}
適用()メソッドは、指定された「本」と引数配列を使用してその機能を呼び出すために、関数オブジェクトで呼び出すことができます。参照してください: http://odetocode.com/blogs/scott/archive/2007/07/04/function-apply-and-function-call-in-javascript.aspx のコールの説明については、()と適用されます(ジャバスクリプトに)機能する。
次に、あなたの関数の名前だけではなく、関数オブジェクトを返すようにget_formatFunctionを()になるでしょう。またはあなたが試すことができます:
me[me.get_formatFunction()]
...その名によって「私」に定義される関数を取得します。 (get_formatFunction()が文字列を返す場合 'myFuncという'、これはme.myFuncと等価であることに注意してください)
[編集:「この」「私」を使用するへの参照を変更する代わりに、
私はあなたの全体的な計画が何であるかわからないんだけど、あなたの代わりに自分の名前を自分の周りの機能を渡すことができます:
function Foo(x, y) {
// do something
}
function Bar(f, a, b) {
// call Foo(a,b)
f(a,b);
}
Bar(Foo, 1, 2);