从字符串向对象追加javascript函数和vars声明
我面临以下问题: 我有一个字符串,其中包含javascript变量和函数声明 例如:从字符串向对象追加javascript函数和vars声明,javascript,class,web,Javascript,Class,Web,我面临以下问题: 我有一个字符串,其中包含javascript变量和函数声明 例如: // this is the content of the jsString var passed to the _MyClass ctor var toto = "Hey"; var foo ="oh"; function myFunc(str) { toto = str; } 我有一个类声明如下: class _MyClass { constructor(jsString) // wher
// this is the content of the jsString var passed to the _MyClass ctor
var toto = "Hey";
var foo ="oh";
function myFunc(str) {
toto = str;
}
我有一个类声明如下:
class _MyClass
{
constructor(jsString) // where JsString is the above JS
{
this.aVar = 2;
}
}
我想用JS字符串填充我的\u MyClass类。
我需要能够打电话:
var myClassInstance = new _MyClass(jsString);
myClassInstance.myFunc("test");
我知道可以用eval函数填充窗口对象,但我不知道对象是否可以(对象上的eval func已弃用)
我也知道这并不常见,但它是在我没有选择权的特定环境中使用的
提前感谢您的帮助。这个要求很奇怪,我强烈建议您尽一切可能消除这个要求,将数据传递给构造函数,而不是包含代码的字符串 但对于需求本身:除非您事先知道字符串中变量和函数的名称,否则在没有JavaScript解析器的情况下无法实现这一点(例如-该链接现在已关闭,但我假设它是临时的) 使用Esprima或类似的工具,您会:
var toto=…
更改为obj.toto=…
和function myFunc()…
更改为obj.myFunc=function myFunc()…
等(注意并小心丢失提升,因为我们正在将函数声明更改为函数表达式)。您还必须在函数中查找并更新对标识符的引用(您可以使用Esprima,也可以使用其他函数)var obj = this;
eval(theUpdatedCode);
…在当前上下文中评估代码。这将把各种内容分配给obj
同样地,我不会这样做,我会尽我最大的努力来改变要求。你到底想达到什么?MyClass的ctor中的字符串参数做什么?你只是想从一个实例方法中设置一个全局变量,还是想设置一个实例变量?你为什么需要这样做ave代码是这样的字符串?!(不是我的dv)我知道这不是一种常见的做法,但我没有选择。传递给我的ctor的字符串是我的帖子“var toto=”嘿“…”@Akiat:为什么你没有选择?因为我需要模拟一个环境。