function B(){}
function A(){
return B;
}
function C(){
return "text";
}
new A; //function B(){}
new C; //C {}
请注意()
和new A
之后没有new C
。通常我们会做类似new A()
的事情,我认为这会导致错误,但它运行正常。现在我以前从未使用new
,这对我来说似乎很奇怪。出于某种原因,他们工作但new A
返回函数B
,同时new C
返回新创建的对象,构造函数为C
。
另外,我不知道为什么A
和C
是"自动"执行,解释会很棒。感谢。
答案 0 :(得分:2)
new A
与new A()
的关系只是语法的一个怪癖,它们完全相同。如果你不用括号,它就像你把它们包括在内一样。在给定原型A.prototype
的情况下创建新对象,然后使用新对象A
调用this
。只有在您有参数传递给构造函数时才需要括号。
返回如何影响创建没有括号的对象的过程
在()
表达式中使用new
,构造函数的返回值不会受到任何影响。同样,new A
和new A()
完全相同。
这里是关于构造函数返回值的处理(无论是否使用()
):new
运算符创建一个对象,结果为{{1 expression是对该对象的引用,除非构造函数返回非new
对象引用。如果它返回任何原语(例如null
)或"text"
,则null
运算符的返回值完全被忽略并且{{{ 1}} expression是创建的对象new
。唯一的时间new
返回除了它创建的对象之外的任何内容,如果构造函数返回非new
对象引用;在这种情况下,new
表达式的结果是构造函数返回的对象引用。此异常使得返回现有对象以满足null
语义而不是新对象成为可能。