Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中有没有一种方法可以将给定函数定义为字符串,并可能进行修改和求值?_Javascript_Function_Eval - Fatal编程技术网

javascript中有没有一种方法可以将给定函数定义为字符串,并可能进行修改和求值?

javascript中有没有一种方法可以将给定函数定义为字符串,并可能进行修改和求值?,javascript,function,eval,Javascript,Function,Eval,我试图在一个新的上下文中计算函数,也就是说,一个包含某个定义的词的函数,但该词在范围中不存在。如果我将函数定义为字符串,那就很容易了,但我想提供一个函数的常规列表,如下所示: var funcs = { first: function() { return 'yayaya'; }, second: function() { return 'okokok' + keyword; }, ... }; 随后: function Thing () {}; for (func in fun

我试图在一个新的上下文中计算函数,也就是说,一个包含某个定义的词的函数,但该词在范围中不存在。如果我将函数定义为字符串,那就很容易了,但我想提供一个函数的常规列表,如下所示:

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()函数或等效函数,它返回函数的源代码。这在javascript中是可能的吗?

试着简单地取出
.definition()
试着简单地取出
.definition()

这将起作用,尽管我确信有一个更长、更优雅的解决方案:

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

这将起作用,但我相信有一个更长、更优雅的解决方案:

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

JS的标准方法是对函数调用
toString()
。像这样:

function myFun() {}

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

JS的标准方法是对函数调用
toString()
。像这样:

function myFun() {}

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

您回答了最初的问题,这将生成函数定义。非常感谢。另一方面,您真的确定需要使用eval吗?听起来,您可能可以在方法签名中添加一个额外的参数,或者将关键字作为属性存储在对象上。当然可以!你能打它旁边的复选标记让我得分吗=在JavaScript中,将对象/值“转换”为字符串的标准方法是对值调用toString()。如果该值可以为null/undefined等,则可以使用String(foo)来确保安全。您回答了原始问题,这将生成函数定义。非常感谢。另一方面,您真的确定需要使用eval吗?听起来,您可能可以在方法签名中添加一个额外的参数,或者将关键字作为属性存储在对象上。当然可以!你能打它旁边的复选标记让我得分吗=在JavaScript中,将对象/值“转换”为字符串的标准方法是对值调用toString()。如果该值可以为空/未定义等,则可以使用字符串(foo)来确保安全。您的答案工作正常!所以我实际上并不需要函数的文本,毕竟eval()将计算纯函数!尽管如此,另一个人还是回答了原来的问题,所以我给了他答案。虽然他的答案可能更好,但如果这意味着eval()调用被取消=)你的答案成功了!所以我实际上并不需要函数的文本,毕竟eval()将计算纯函数!尽管如此,另一个人还是回答了最初的问题,所以我给了他支票。虽然他的答案可能更好,如果这意味着eval()调用被取消=)