2011-12-27 2 views
2

я следующий в JS:Как вызвать функцию, которая дается мне строки

var rs = new myResponse(); 
var rq = new myRequest(); 

c = "function(myRequest,myResponse){myResponse.body = 'hello'; myResponse.end();}"; 

сейчас, я хочу, чтобы вызвать функцию, которая находится в «с».

Кто-нибудь знает как?

благодарит заранее.

+4

Где 'c' родом? Наличие кода в строках обычно является признаком плохого дизайна. –

+1

Возможный дубликат [С учетом строки, описывающей функцию Javascript, преобразуйте ее в функцию Javascript] (http://stackoverflow.com/questions/2573548/given-a-string-describing-a-javascript-function-convert-it -в-а-Javascript-FUNC) –

ответ

2

либо:

var fn = new Function("myRequest, myResponse" , "myResponse.body = 'hello';myResponse.end();"); 

или eval функции, которая выполняет код непосредственно из строки:

c = "function(myRequest,myResponse){myResponse.body = 'hello'; myResponse.end();}"; 
    eval("var fn = "+c); 

    fn(); 
0

Это то, что имеет значение eval.

eval('func = ' + c); 
var result = func(rs, rq); 

Будьте осторожны, так как это не безопасно для непроверенной ввода, то есть, если это не из надежного источника это может быть опасно.

0
//Create the function call from function name and parameter. 
var funcCall = strFun + "('" + strParam + "');"; 

//Call the function 
var ret = eval(funcCall); 
0

Почему бы не создать функцию, как в следующем коде:

var rs = new myResponse(); 
var rq = new myRequest(); 

c = new Function("myRequest","myResponse","myResponse.body = 'hello'; myResponse.end();"); 
// or 
// c = new Function("myRequest,myResponse","myResponse.body = 'hello'; myResponse.end();"); 

c(); 

Или, если вы не можете, сделать следующий, например:

function stringToFunction(str) { 
    var m=str.match(/\s*function\((.*?)\)\s*{(.*?)}\s*/); 
    if(m)return new Function(m[1],m[2]); 
} 

var rs = new myResponse(); 
var rq = new myRequest(); 

c = "function(myRequest,myResponse){myResponse.body = 'hello'; myResponse.end();}"; 

stringToFunction(c)(); 
// or 
//var f=stringToFunction(c); 
//f(); 
Смежные вопросы