从字符串创建类定义

时间:2020-07-31 21:08:43

标签: javascript

我正在尝试从字符串创建ES类定义。

const def = "class M {}";
// ???
const inst = new M();

我不在Window中,所以不能使用基于DOM的方法,例如将其放入脚本标签中。我用function()eval()尝试了几种方法,但没有真正的成功。

我最接近的是一种非常丑陋的工厂方法。

const M = new Function('return new class M { test; constructor(){ this.test = "Hello"; } tfun(input){ return input + 7; } }');

const inst = new M();
inst.test; // Hello
inst.tfun(5); // output: 12

这不会用参数调用构造函数。

const M = new Function('return new class M { test; constructor(param){ this.test = param; } tfun(input){ return input + 7; } }');

const inst = new M("Hello");
inst.test; // undefined 

1 个答案:

答案 0 :(得分:2)

一种实现此目的的方法是在字符串中添加实例化该类的文本,然后eval将其实例化:

const def = 'class M {}';
const instantiator = def + '; new M();';

const m = eval(instantiator);

编辑:
要对注释进行后续处理,如果您想要类本身,它甚至更简单-只需将其名称添加到您要评估的字符串中即可:

const def = 'class M {}';
const statement = def + '; M;';

const M = eval(statement);
const m = new M(); // This now works!