Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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_Node.js_Node Webkit - Fatal编程技术网

从JavaScript中的文本创建类

从JavaScript中的文本创建类,javascript,node.js,node-webkit,Javascript,Node.js,Node Webkit,我正在尝试为我的一个项目为NW.js()编写一个JavaScript加载程序。我已经对peg.js和estools(esprima/escodegen)有所了解,因此将JavaScript模块解析为各种函数和变量声明实际上没有问题,我的问题是将不同的文本表达式和声明实例化为单独的上下文/对象 eval()似乎无法将声明字符串转换为我选择的变量 $.context.fn = eval("function anonymous(a,b,c){ return a+b+c; }"); //$.conte

我正在尝试为我的一个项目为NW.js()编写一个JavaScript加载程序。我已经对peg.js和estools(esprima/escodegen)有所了解,因此将JavaScript模块解析为各种函数和变量声明实际上没有问题,我的问题是将不同的文本表达式和声明实例化为单独的上下文/对象

eval()
似乎无法将声明字符串转换为我选择的变量

$.context.fn = eval("function anonymous(a,b,c){ return a+b+c; }");

//$.context.fn = undefined..
我唯一能成功地将文本转换为变量的是函数:

$.context.fn = new Function('a','b','c','return a+b+c;');

//$.context.fn = function(a,b,c){ ... }
但似乎没有类似的方法将字符串转换为类,例如:

$.context.cl = new Class(params,body) ???

//error
问题:


是否有某种类型的加载程序库可供我使用,或者是否有一些技巧可让整个过程使用
eval()

您可以使用eval创建函数:

(一)

(二)

(三)


您可以使用eval创建函数:

(一)

(二)

(三)

你的问题是

function anonymous(a,b,c){ return a+b+c; }
是函数声明,而不是函数表达式。函数声明不返回任何内容:它们使用提供的名称定义新函数。在本例中,名称为
匿名

您希望改用函数表达式。通过将函数括在括号中,可以生成函数表达式:

$.context.fn = eval("(function anonymous(a,b,c){ return a+b+c; })");
并以同样的方式工作:

$.context.cls = eval("(class MyArray extends Array {})")
你的问题是

function anonymous(a,b,c){ return a+b+c; }
是函数声明,而不是函数表达式。函数声明不返回任何内容:它们使用提供的名称定义新函数。在本例中,名称为
匿名

您希望改用函数表达式。通过将函数括在括号中,可以生成函数表达式:

$.context.fn = eval("(function anonymous(a,b,c){ return a+b+c; })");
并以同样的方式工作:

$.context.cls = eval("(class MyArray extends Array {})")

eval
适用于任何表达式:

但是,
eval
始终捕获本地范围,这可能是您不想要的。或者使用函数构造函数的技巧获得所需的作用域。要实例化一个类,只需创建一个返回所述类(或任何其他语言构造)的函数:


eval
适用于任何表达式:

但是,
eval
始终捕获本地范围,这可能是您不想要的。或者使用函数构造函数的技巧获得所需的作用域。要实例化一个类,只需创建一个返回所述类(或任何其他语言构造)的函数:

$.context.fn = eval("(function anonymous(a,b,c){ return a+b+c; })");
$.context.cl = eval("(class { constructor() { … } … })");
$.context.fn = (new Function("function named(a,b,c){ return a+b+c; }\nreturn named;"))();
$.context.cl = (new Function("class Example { constructor() { … } … }\nreturn Example;"))();