【问题标题】:How to convert String to Function prototype in JS? [duplicate]如何在 JS 中将字符串转换为函数原型? [复制]
【发布时间】:2020-04-24 20:13:36
【问题描述】:

所以我有一个带有以下示例键值对的 js 对象。

var serial = { 
 open: function(a, b) { 
       do something..
},

close: function (a,b) { 
       do something
}

}

如上所示,键的值是 js 函数。由于某些要求,我不得不将整个对象转换为字符串。我使用以下代码将其转换为字符串:

var json = JSON.stringify(window.serial, function(key, value) {
    if (typeof value === 'function') {
        return value.toString();
    } else {
        return value;
    }   
});

如何将字符串转换回函数原型并将其存储在同一个 obj 中?

【问题讨论】:

  • 听起来像是一个 XY 问题:为什么需要将函数存储为字符串?
  • @Terry 由于某些要求/复杂性
  • 听起来很奇怪。通常,您只需发送 data,不发送函数或方法,然后使用数据初始化对象。对象知道它需要的方法。
  • @krishnanspace return "" 也将函数转换为字符串,没有任何问题。但是一个不能转换回函数的字符串实际上可以做你想做的事情。当然,它也可以简单地转换为空函数。

标签: javascript angularjs


【解决方案1】:

eval 将字符串转换回函数

var str = "function fn(){ console.log('loggin function') }";

eval(str);

fn();

【讨论】:

  • eval() 几乎不应该被使用。
  • @Utkanos 实际上,eval 是将字符串转换为可执行代码的明智选择。
  • @Bergi 我同意你的看法。然而,大多数时候我没有看到将函数作为字符串传输的合理理由。很多时候,有人试图解决一个 XY 问题,并在有更好的选择时决定“嘿,我可以把它变成一个字符串”。但是,这并不是说没有次您想要将文本转换为可执行代码。例如,您可以序列化功能并通过 websocket 发送推送,因此它可以在不同的机器上执行。这是进行分布式计算的一种简单而有效的方法。
猜你喜欢
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 2020-06-04
  • 2021-10-26
  • 2018-12-03
  • 2019-06-17
相关资源
最近更新 更多