2009-09-16 5 views
0

범위에 존재하지 않는 특정 단어를 포함하는 새로운 컨텍스트에서 함수를 평가하려고합니다. 내가 문자열로 함수의 정의가 있다면 그것은 충분히 쉽게,하지만 난과 같이, 함수의 일반 목록이 작업을 수행 할 수있는 기능을 제공하고 싶습니다 : 나중에 다음자바 스크립트에서 문자열로 주어진 함수의 정의를 얻는 방법이 있을까요? 수정 및 평가할 수 있습니까?

var funcs = { 
    first: function() { return 'yayaya'; }, 
    second: function() { return 'okokok' + keyword; }, 
    ... 
}; 

:

function Thing() {}; 

for (func in funcs) { 
    var definition = funcs[func].definition(); 
    var keyword = "NOW I AM THE KEYWORD"; 
    var actual_func_with_keyword_defined = eval(definition); 
    Thing.prototype[func] = actual_func_with_keyword_defined; 
} 

내가 누락 된 것은 definition() 함수 또는 이와 동등한 함수의 소스를 반환하는 것입니다. 자바 스크립트에서 가능합니까?

답변

1

이 작동합니다 :

function foo() { 
} 
var bar = '' + foo; //type cast to a string by adding an empty string 
alert(bar); 
+0

원래 질문에 답한 경우 함수 정의가 생성됩니다. 고맙습니다! – prismofeverything

+0

사이드 노트에서 정말로 eval을 사용해야한다고 확신합니까? 메서드 서명에 추가 매개 변수를 추가하거나 개체에 속성으로 키워드를 저장할 수있는 것처럼 들립니다. – RMorrisey

+0

물론! 포인트를 얻으려면 옆에있는 체크 표시를 누를 수 있습니까? = D – RMorrisey

2

간단히 .definition()을 사용해보세요. 나는 더 긴, 더 우아한 해결책이있을거야하지만

+0

답했습니다. 결국 함수에 텍스트를 실제로 필요로하지 않았기 때문에 eval()은 순수 함수를 평가할 것입니다! 그럼에도 불구하고, 다른 남자가 원래의 질문에 답했기 때문에 나는 그에게 수표를 주었다. – prismofeverything

+0

아마도 더 나은 대답 일 것입니다. eval() 호출이 꺼내지면 =) – RMorrisey

2

JS 표준 방법은 기능에 toString()를 호출하는 것입니다. 좋아요 :

function myFun() {} 

myFun.toString() // gives "function myFun() {}", 
       // potentially with white space differences