Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何评估一个字符串化的类方法?_Javascript_Eval - Fatal编程技术网

Javascript 如何评估一个字符串化的类方法?

Javascript 如何评估一个字符串化的类方法?,javascript,eval,Javascript,Eval,我正在序列化函数以通过网络发送它们。然后,他们被从他们的严格形式的另一边处决 我可以这样做: function test1() { console.log("test1") } eval(`(${test1})`)() 我也可以这样做: const test2 = function() { console.log("test2") } eval(`(${test2})`)() 这也适用于: const test3 = () => { console.log("test3") } eva

我正在序列化函数以通过网络发送它们。然后,他们被从他们的严格形式的另一边处决

我可以这样做:

function test1() { console.log("test1") }
eval(`(${test1})`)()
我也可以这样做:

const test2 = function() { console.log("test2") }
eval(`(${test2})`)()
这也适用于:

const test3 = () => { console.log("test3") }
eval(`(${test3})`)()
(所有这些都会产生不同的函数字符串化版本)

但是,此操作失败:

class A {
    test4() { console.log("test4") }
}
const a = new A
eval(`(${a.test4})`)()
错误是
意外标记{
,因为字符串化方法是
test4(){console.log(“test4”)}
,它不是有效的函数声明(既没有命名也没有匿名)

静态方法不能解决问题(相同的结果)


我的问题是:通过网络发送类方法的最佳方式是什么?谢谢

我不完全确定为什么会这样,但最后一个示例将使用:
eval(`(${a.test4()})`;
。您可能应该做一些类似于
window.allMyCallableStuff={test1:()=>{console.log('test1')}的事情
并且不使用eval,但
让varFuncName='test1';window.allMyCallableStuff[varFuncName]();
我可能没有与您尝试执行的操作完全匹配的内容,但您可能可以不使用
eval