gpt4 book ai didi

javascript - 如何像javaScript中的函数一样执行String?

转载 作者:行者123 更新时间:2023-12-01 02:29:54 25 4
gpt4 key购买 nike

在 JAVA 中我生成一个像这样的字符串:

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

我可以在javaScript中像JSON对象一样轻松地使用这个字符串,但是我无法执行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('');

请记住,如果您从真实事件中执行此操作,this 将不是对象 - 例如,它将是单击的元素。

从设计的 Angular 来看,函数是否需要成为对象的一部分?

function objectClicked(obj) {
alert(obj.name + ' clicked');
}

您可以将该函数取出并放入您自己的 JavaScript 中,然后传递一个更简单的对象:

{
"name":"ali",
"lastName":"cate"
};

如果你真的决定使用eval...将函数包装在一个自执行的匿名函数中,然后将其eval结果分配给action,这将导致action只是从此开始正常功能...

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

obj.action = eval(obj.action);

obj.action();

关于javascript - 如何像javaScript中的函数一样执行String?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com