javascript - 新功能有错误吗?

标签 javascript node.js

我已阅读 Function 。所以我尝试通过new Function函数声明转换为函数表达式。但是,我被困在下面的代码中:

function Foo(name, age) {
    Foo.prototype.name = name;
    Foo.prototype.age  = age;
}
var foo = new Foo(1,2); // this is ok
console.log(Foo.prototype.hasOwnProperty('name'));
console.log(foo.hasOwnProperty('name'));

但是转换后出现错误:

var Foo = new Function(['name', 'age'], 'Foo.prototype.name=name;Foo.prototype.age=age;');
var foo = new Foo(1,2); // error: Foo is not defined 
console.log(Foo.prototype.hasOwnProperty('name'));
console.log(foo.hasOwnProperty('name'));

有什么错误吗?任何答案都有帮助。

代码就在我的 Chrome 浏览器中。但是它在平台上出错:

  • nodejs:6.10.0
  • win7 64位

最佳答案

该错误是因为 var Foo 未定义在 Function 可以访问的位置,至少在使用 Node 时没有。

当您使用 new Function() 构造函数从字符串创建函数时,该函数只能访问全局范围,无论它是在哪里创建的。

而且,在 Node 模块中,var Foovar foo 不是全局变量。它们是局部变量,仅存在于当前文件/模块中的“模块”范围内。

var bar = 'bar';
console.log(bar);        // function
console.log(global.bar); // undefined

要允许 new Function() 访问 Foo,您必须将后者定义为全局变量(或 global 的属性) 对象)。

global.Foo = new Function(['name', 'age'], 'Foo.prototype.name=name;Foo.prototype.age=age;');
var foo = new Foo(1,2);
// ...

Though, you should be aware that modifying the global scope/object like this is generally frowned upon in Node, since this goes against its intent/design of using isolated modules.

<小时/>

不过,要从表达式定义函数,您不需要使用 Function 构造函数。您可以改为 place the declaration where an Expression is expected ,例如在赋值运算符之后。

var Foo = function (name, age) {
    Foo.prototype.name = name;
    Foo.prototype.age  = age;
};
var foo = new Foo(1,2); // this is ok
// ...

关于javascript - 新功能有错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42743075/

相关文章:

javascript - Polymer 应用程序的全局数据存储

javascript - 选择单选按钮时如何更改隐藏表单数据的值?

javascript - Express 服务器和 Axios CORS Preflight 响应不成功

javascript - Node.js/sequelize : Accessing the result of findOne() function?

node.js - 附加到 winston 记录的最后一行

javascript - Facebook 点赞按钮并添加评论事件

javascript - 为什么 clearTimeout 不清除此 react 组件中的超时?

javascript - Controller 数据未传递给指令

node.js - 如何转换多个Mongoose文档?

node.js - NodeJS - 使用 nodemailer-smtp-transport 的 nodemailer