我的问题是关于使用new function(){ ... }
而不是new Function();
到目前为止我的理解/假设
我的问题
根据我的上述假设,为什么new Function();
和new function(){ ... }
会返回不同的内容?
第一个返回一个函数对象,但后者返回一个标准对象。鉴于引擎盖下的函数表达式使用Function()构造函数,为什么后者的行为与new Function();
的行为不同?
使用new function(){ ...}
我希望有一个函数对象,而不是标准对象。
答案 0 :(得分:2)
以下几行基本相同:
function foo(...) {...}
var foo = function (...) {...};
var foo = new Function (...);
它们都声明了一个新函数(它是一个对象,它是Function
的一个实例,它继承了当前作用域中的Object
原型,...),可以通过foo
变量。
new
关键字从函数中实例化一个对象,该函数允许您使用标准OOP语言创建类似于类实例的内容。
继续上面的例子:
var bar = new foo(...)
将在当前作用域中实例化foo
函数的实例,该实例可以通过bar
变量访问。
为什么
new Function();
和new function(){ ... }
会返回不同的内容?
我要稍微改写一下这个例子。而不是:
new Function()
//and
new function(){ ... }
我打算使用
new Function()
//and
var foo = function () { ... };
new foo();
new Function()
返回与new foo()
不同的内容的原因完全是因为Function
与foo
的功能不同。
我希望您不会因new Object()
返回具有与new Array()
不同的功能的其他对象这一事实而感到困惑。完全相同的事情发生在这里。
后面的表达基本上是:鉴于引擎盖下的函数表达式使用
Function()
构造函数,为什么后者的行为与new Function();
的行为不同?
new (new Function ( ... ))
答案 1 :(得分:1)
new Function(...)返回一个新的函数,而new function(){...}返回一个新的 Object 。
基本上,函数只是评估一段代码的一种方法。
对象是一种在javascript中存储数据的方式。
旁注:你可以在技术上做到
new (new Function(...))
返回一个新对象。