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()调用被取消=)