从字符串调用函数的正确方法是什么?

时间:2017-01-12 13:14:30

标签: javascript

可以执行以下操作:

// Response from an API as a string, that contains a function to call.
const stringFunc = 'myFunc({"Status":200,"Message":"This is a message"})';

function myFunc(obj) {
  console.log(obj);
}

function callBack(stringFn) {
  return Function.prototype.call(stringFn);
}

callBack(stringFunc);

控制台日志:

{"Status":200,"Message":"This is a message"}

它似乎工作得很好,但想知道这是否是正确的方法来解决这个问题?有没有更好的方法或不可预见的含义?

由于

2 个答案:

答案 0 :(得分:1)

使用eval方法。

<!DOCTYPE html>
<html>

<body>
    <script>
        const stringFunc = 'myFunc({"Status":200,"Message":"This is a message"})';

        function myFunc(obj) {
            console.log(obj);
        }

        function callBack(stringFn) {
            return Function.prototype.call(stringFn);
        }

        eval(stringFunc);
    </script>
</body>

</html>

答案 1 :(得分:1)

作为eval的替代方案,您可以使用Function构造函数:

const stringFunc = 'myFunc({"Status":200,"Message":"This is a message"})';

function myFunc(obj) {
  console.log(obj);
}

const payloadFunc = new Function(stringFunc);
payloadFunc() //logs the object