所以,假设我有一个javascript函数
function A(){
return function(){
console.log('something');
return new B();
}
}
使用new A();
与A();
进行任何不同的调用吗?
答案 0 :(得分:2)
由于该函数具有明确的return
并且不使用this
,因此使用或不使用new
运行它的结果没有区别。
答案 1 :(得分:1)
当您调用没有“new”的函数时,您怀疑“this”指向的是什么?它将是“窗口”。更新比使用“new”调用它时更新新构建的新对象要慢。
答案 2 :(得分:0)
其他人已经给出了关于结果的答案(使用new
等同于不使用它吗?),但让我解释为什么以下两个结果是等价的:
var no_new = A();
var with_new = new A();
ECMAScript的相关部分是section 13.2.2(我将省略并简化一些信息并调整该部分的内容以适应这个答案)。执行new A()
时会发生这种情况:
prototype
的{{1}}:
A
的原型是对象,则新创建的对象A
将设置为prototype
的原型。A
将设置为prototype
的默认原型。Object
,并检查结果。
A()
的返回值。new
的返回值。在你的情况下,执行将采用路径3.1,aka new
运算符将返回对内部匿名函数的引用,与没有new
的函数调用相同。
因此,变量new
和no_new
都将以下列形式引用函数:
with_new
(请注意,function () {
console.log('something');
return new B();
}
和no_new
相同但不相同。它们不引用同一个对象:JSFiddle)
with_new