{
"name":"ali",
"lastName":"cate",
"action":"function(event) {alert(this.name +'clicked');}"
}
我可以在javaScript中使用这个String非常简单,就像JSON对象一样,但是我无法执行action属性中描述的函数(在JS中),我遇到了这个错误:
TypeError: Object function(event) {alert(this.name +'clicked');}
has no method 'apply'
所以......有什么方法可以让它发挥作用吗?
编辑(更多信息)
问题是Json String是用Java生成的(带引号)。这就是一个例子,实际上真正的问题是使用高图饼图,这接收了事件属性中的函数,是谁试图运行它。
答案 0 :(得分:4)
你可以在没有eval
的情况下通过删除函数...
var obj = {
"name":"ali",
"lastName":"cate",
"action": function(event) {alert(this.name +'clicked');}
};
obj.action('');
请记住,如果您从真实事件中执行此操作,this
将不会成为对象 - 例如,它将是单击的元素。
从设计角度来看,函数是否需要成为对象的一部分?
function objectClicked(obj) {
alert(obj.name + ' clicked');
}
您可以将该功能拉出并在您自己的JavaScript中使用,然后传递一个更简单的对象:
{
"name":"ali",
"lastName":"cate"
};
如果您确实使用eval
...将函数包装在自执行匿名函数中,则将此eval结果赋给该操作,这将导致操作只是一个正常的函数从那以后......
var obj = {
"name":"ali",
"lastName":"cate",
"action":"(function() { return function(event) {alert(this.name + ' clicked');} }())"
};
obj.action = eval(obj.action);
obj.action();
答案 1 :(得分:2)
发生此错误,因为action
是字符串而不是函数。
你可以让它与eval
一起使用,但这是不好的做法。
答案 2 :(得分:1)
'eval'会这样做:
var obj = { "action": "alert('test');" };
eval(obj.action);