JavaScript- 문자열 이름에서 함수를 호출하고 배열 객체를 전달하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1544769

문제

사용자가 특정 이벤트에 대한 컨트롤에서 호출되는 자체 스크립트 이름을 제공 할 수있는 사용자 컨트롤이 있습니다.

다음 코드가 있습니다.

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top