在以下JavaScript代码中,new使用了两次但不是错误:
function Foo(i) {
this.i = i;
}
Foo.specialConstructor = function() {
return new Foo(1337);
};
foo = new Foo.specialConstructor();
console.log(foo.i);
但是,以下代码会导致Uncaught TypeError: object is not a function
:
foo = new (new Foo(1337));
为什么第二种情况导致错误,而第一种情况却没有?
答案 0 :(得分:1)
第一种情况不是错误,因为如果构造函数返回非原始值,则返回它而不是创建的对象。因此,简化了以下情况:
__proto__
变量设置为Foo.specialConstructor.prototype
Foo.specialConstructor
Foo.specialConstructor
返回非原始值,所以它由new运算符而不是新创建的对象返回第二种情况是错误,因为new运算符只能用于函数。