使用toString和eval()运行Javascript类函数
下面的代码段由于某种原因不起作用,我很乐意提供帮助 var MyClass={ 剂量:功能{ 提醒“你好”; } } const evalString='new'+MyClass.toString+'.doSomething'; 蒸发 我认为你使用eval。也许您可能想在下面再次简单地阅读一下eval的用法 不要不必要地使用eval! eval是一个危险的函数,它以调用方的权限执行传递给它的代码。如果使用可能受恶意方影响的字符串运行eval,则最终可能会在具有网页/扩展名权限的用户计算机上运行恶意代码。更重要的是,第三方代码可以看到调用eval的范围,这可能导致以类似函数不易受影响的方式进行攻击 eval通常也比其他方法慢,因为它必须调用JS解释器,而许多其他构造都是由现代JS引擎优化的 有更安全更快的!常见用例的eval替代方案 访问成员属性 不应使用eval将属性名称转换为属性。考虑下面的示例,在执行代码之前,要访问的对象的属性未知。这可以通过eval完成:使用toString和eval()运行Javascript类函数,javascript,class,oop,eval,tostring,Javascript,Class,Oop,Eval,Tostring,下面的代码段由于某种原因不起作用,我很乐意提供帮助 var MyClass={ 剂量:功能{ 提醒“你好”; } } const evalString='new'+MyClass.toString+'.doSomething'; 蒸发 我认为你使用eval。也许您可能想在下面再次简单地阅读一下eval的用法 不要不必要地使用eval! eval是一个危险的函数,它以调用方的权限执行传递给它的代码。如果使用可能受恶意方影响的字符串运行eval,则最终可能会在具有网页/扩展名权限的用户计算机上运行
var obj = { a: 20, b: 30 };
var propName = getPropName(); // returns "a" or "b"
eval( 'var result = obj.' + propName );
然而,这里不需要eval。事实上,人们不鼓励在这里使用它。相反,请使用更快、更安全的属性访问器:
var obj = { a: 20, b: 30 };
var propName = getPropName(); // returns "a" or "b"
var result = obj[ propName ]; // obj[ "a" ] is the same as obj.a
您甚至可以使用此方法访问子体属性。使用eval,这看起来像:
var obj = {a: {b: {c: 0}}};
var propPath = getPropPath(); // returns e.g. "a.b.c"
eval( 'var result = obj.' + propPath );
与您自己的情况一样,您有:
const evalString = 'new (' + MyClass.toString() + ')().doSomething()';
eval(evalString);
哪一种评价;被错误地使用了
您可能需要阅读更多内容,以帮助您确定您计划归档的内容以及更好的归档方式。根据@Ryan的评论,答案是: 类MyClass{ 剂量{ 提醒“你好”; } } const evalString='new'+MyClass.toString+'.doSomething';
蒸发;MyClass不是一个类。也许你指的是类MyClass{doSomething{alert'Hello';}}。你在编程语言中会感到困惑,这就是javascript中定义类的方式。我没有感到困惑,而这并不是javascript中定义类的方式。真的。@Ryan你说得对!欢迎回答Down我明白你想说什么,我不会使用问题附带的代码,这只是我问题的一个例子很高兴知道你明白,我想你也可以将同样的概念应用到你的问题中。我正在尝试从函数browser.devtools.inspectedWindow.eval中捕获一个dom元素。附加链接中的更多信息,你可以发布你正在谈论的github链接吗,在回答你的问题之前,我就已经尝试过了,但是你最终只能得到:class MyClass{doSomething{alert'Hello';}}}const evalString='new'+MyClass.toString+'.doSomething';console.logevalString;新函数MyClass{}。doSomething未定义,对我来说没有任何意义。按Run code snippet按钮,它可以完美地工作!非常适合:Error:{message:TypeError:intermediate value.doSomething不是函数,文件名:https://stacksnippets.net/js 第21行>求值,行号:1,行号:1}?