如何像javaScript中的函数一样执行字符串?

如何像javaScript中的函数一样执行字符串?,javascript,jquery,json,Javascript,Jquery,Json,在JAVA中,我生成如下字符串: { "name":"ali", "lastName":"cate", "action":"function(event) {alert(this.name +'clicked');}" } 我可以像JSON对象一样在javaScript中很容易地使用这个字符串,但是我不能执行action属性中描述的函数(在JS中),我有以下错误: TypeError: Object function(event) {alert(this.name +'clicked'

在JAVA中,我生成如下字符串:

{
 "name":"ali",
 "lastName":"cate",
 "action":"function(event) {alert(this.name +'clicked');}"
}
我可以像JSON对象一样在javaScript中很容易地使用这个字符串,但是我不能执行action属性中描述的函数(在JS中),我有以下错误:

 TypeError: Object function(event) {alert(this.name +'clicked');}
 has no method 'apply'
所以。。。有什么办法使它起作用吗

编辑(更多信息)


问题是Json字符串是用Java生成的(带引号)。这就是一个例子,实际上真正的问题是highchart饼图,它接收事件属性中的函数,并且是谁试图运行它。

您可以不使用
eval
而通过删除函数周围的引号来执行此操作

var obj = {
 "name":"ali",
 "lastName":"cate",
 "action": function(event) {alert(this.name +'clicked');}
};

obj.action('');
请记住,如果您从真实事件执行此操作,则此将不是对象-例如,它将是单击的元素

从设计的角度来看,功能是否需要成为对象的一部分

function objectClicked(obj) {
    alert(obj.name + ' clicked');
}
您可以将函数拉出并将其放入自己的JavaScript中,然后传递一个更简单的对象:

{
 "name":"ali",
 "lastName":"cate"
};
如果你真的决定使用
eval
。。。将该函数包装在一个自动执行的匿名函数中,然后将该函数的评估结果分配给该操作,这将导致该操作从此成为一个普通函数

var obj = {
   "name":"ali",
   "lastName":"cate",
   "action":"(function() { return function(event) {alert(this.name + ' clicked');} }())"
};

obj.action = eval(obj.action);

obj.action();

发生此错误是因为
操作
是字符串而不是函数

您可以让它与
eval
一起使用,但这是一种糟糕的做法。

'eval'可以:

var obj = { "action": "alert('test');" };
eval(obj.action);

我相信eval()可以做到这一点,但使用它通常被认为是不好的做法。它是有效的JSON,但函数不是被解析为字符串而不是函数吗?它应该,这就是为什么我对
Object function…
消息感到困惑的原因。你真的应该重构它,以便将逻辑作为常规JavaScript提前交付给客户端,JSON只包含数据。可能的重复也要记住,这是危险的,可能会允许人们将JavaScript注入你的页面。Opener说他在Java中生成JSON字符串,并希望在客户端执行javascript函数。删除函数周围的引号会使字符串成为从服务器传输到客户端的无效JSON。见,即+1。。。但只有使用第二种方法。对我来说,JSON中的功能不是一个好主意。将函数放在ajax或JSON解析函数回调上。-我引用@Quentin(参见上面的评论),问题是Json字符串是用Java生成的(带引号)。这是一个例子,实际上真正的问题是highchart饼图,它接收函数in和事件属性,是谁试图运行它。我添加了一个
eval
选项。我建议将其包装,以便
eval
的结果是必需的函数。如果不包装它,
eval
将无法按预期工作。