JavaScript新函数表达式和新函数构造函数
我的问题是关于使用JavaScript新函数表达式和新函数构造函数,javascript,function,constructor,new-operator,Javascript,Function,Constructor,New Operator,我的问题是关于使用newfunction(){…}overnewfunction()生成的对象 我目前的理解/假设 当我们使用function()或new function()创建函数时,会得到一个配置为函数的对象(它的内部插槽表示函数类型对象) 无论是否使用新运算符,Function()构造函数都会返回一个新的函数对象 使用函数表达式返回内部使用function()构造函数的函数对象 函数表达式通过解析函数体提供优化 我的问题 按照我上面的假设,为什么newfunction()和新函数()
newfunction(){…}
overnewfunction()生成的对象代码>
我目前的理解/假设
- 当我们使用function()或new function()创建函数时,会得到一个配置为函数的对象(它的内部插槽表示函数类型对象)
- 无论是否使用新运算符,Function()构造函数都会返回一个新的函数对象
- 使用函数表达式返回内部使用function()构造函数的函数对象
- 函数表达式通过解析函数体提供优化
我的问题
按照我上面的假设,为什么newfunction()
和新函数(){…}
返回不同的内容
第一个返回函数对象,但后一个返回标准对象。既然引擎盖下的函数表达式使用function()构造函数,为什么后者的行为与new function()不同代码>
使用new function(){…}
我希望是一个函数对象,而不是标准对象。new function(…)返回一个新的函数,而new function(){…}返回一个新的对象
基本上,函数只是计算一段代码的一种方法
对象是用javascript存储数据的一种方式
旁注:技术上你可以做到
new (new Function(...))
wich返回一个新对象。以下几行基本相同:
function foo(...) {...}
var foo = function (...) {...};
var foo = new Function (...);
它们都在当前范围内声明一个新函数(该函数是一个对象,即继承对象
原型的函数的实例,…),可通过foo
变量访问该函数
new
关键字从一个函数实例化一个对象,该函数允许您在标准OOP语言中创建类似于类实例的东西
继续上面的示例:
var bar = new foo(...)
将在当前范围内实例化foo
函数的实例,该函数可通过bar
变量访问
为什么newfunction()
和新函数(){…}
返回不同的内容
我将稍微改写一下这个例子。而不是:
new Function()
//and
new function(){ ... }
我要用
new Function()
//and
var foo = function () { ... };
new foo();
new Function()
返回与new foo()
不同的东西的原因完全是因为Function
是与foo
不同的函数
我希望您不会被以下事实所迷惑:newobject()
返回的对象与newarray()具有不同的特性。同样的事情正在这里发生
既然引擎盖下的函数表达式使用了function()
构造函数,为什么后者的行为与new function()不同代码>
在引擎盖下,后面的表达式基本上是:
new (new Function ( ... ))
function(){}==newfunction()
,newfunction(){}==newnewfunction()
。