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을 사용하고 있습니다 ... 또한이 예제는 어쨌든 작동하지 않지만 내가 얻으려고하는 것을 보여줄 것이라고 생각했습니다.
위의 예에서 '항목'이 문자열 배열이므로 값 미정의 오류가 발생하고 평가를 하나의 긴 문자열로 변환하려고합니다.
이 기능을 어떻게 달성하려면 '항목'을 통과하여 '항목'을 통과 할 수 있습니까?
지명 된 기능을 통과하는 것이 나쁜 생각이라면 대안이 있습니까?
이것이 내 통제가 선언 된 방법입니다.
<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));
}
지정된 "this"및 인수 배열을 사용하여 해당 함수를 호출하기 위해 apply () 메소드를 호출 할 수 있습니다. 보다: http://odetocode.com/blogs/scott/archive/2007/07/04/function-apply-and-function-call-in-javascript.aspx JavaScript에서 Call () 및 apply () 함수에 대한 설명을 위해.
그런 다음 get_formatfunction ()가 함수의 이름이 아닌 함수 객체를 반환하기를 원합니다. 또는 시도 할 수 있습니다.
me[me.get_formatFunction()]
... 이름으로 '나'에 정의 된 함수를 얻으려면. (get_formatfunction ()이 문자열 'myfunc'을 반환하면 나와 동일합니다.
편집 : 대신 '나'를 사용하기 위해 'this'에 대한 참조가 변경되었습니다
전반적인 계획이 무엇인지 잘 모르겠지만 이름 대신 자신의 기능을 전달할 수 있습니다.
function Foo(x, y) {
// do something
}
function Bar(f, a, b) {
// call Foo(a,b)
f(a,b);
}
Bar(Foo, 1, 2);