Javascript return如何影响创建没有括号的对象的过程

Javascript return如何影响创建没有括号的对象的过程,javascript,class,syntax,Javascript,Class,Syntax,请注意,在新建A和新建C之后没有()。通常我们会执行类似于newa()的操作,我认为这会导致错误,但运行正常。现在我从来没有像这样使用过new,我觉得这很奇怪。由于某种原因,它们工作了,但是newa正在返回函数B,同时newc正在返回新创建的对象,构造函数为C 另外,我也不知道为什么A和C会“自动”执行,请给出解释。谢谢。新的A和新的A()只是语法上的一个怪癖,它们完全相同。如果你去掉括号,就好像你把它们包括进去了一样。创建新对象,给定prototypeA.prototype,然后调用A,新对象

请注意,在
新建A
新建C
之后没有
()
。通常我们会执行类似于
newa()
的操作,我认为这会导致错误,但运行正常。现在我从来没有像这样使用过
new
,我觉得这很奇怪。由于某种原因,它们工作了,但是
newa
正在返回函数
B
,同时
newc
正在返回新创建的对象,构造函数为
C


另外,我也不知道为什么
A
C
会“自动”执行,请给出解释。谢谢。

新的A和新的A()只是语法上的一个怪癖,它们完全相同。如果你去掉括号,就好像你把它们包括进去了一样。创建新对象,给定prototype
A.prototype
,然后调用
A
,新对象为
this
。只有当有参数要传递给构造函数时,才需要括号

return如何影响创建没有括号的对象的过程

构造函数的返回值不受是否在
new
表达式中使用
()
的任何影响。同样,
newa
newa()
完全相同

以下是关于构造函数返回值的处理(无论是否使用
()
):
new
操作符创建一个对象,并且
new
表达式的结果是对该对象的引用,除非构造函数返回一个非
null
对象引用。如果它返回任何原语(如
“text”
)或
null
,其返回值将被
new
操作符完全忽略,
new
表达式的结果就是创建的对象
new
new
仅在构造函数返回非
null
对象引用时返回它创建的对象以外的任何对象;在这种情况下,
new
表达式的结果是构造函数返回的对象引用。此异常使返回现有对象以满足
new
语义而不是新对象成为可能


所有血淋淋的细节都在规范中,并且(用夸张的散文)。

规范中描述的语法是
新的吗?@Derek朕會功夫: 是的,在和(我相信);如果没有构造函数的参数,括号是可选的,这是一个相当有名的语法怪癖。我并不是说它容易阅读(如果你认为ES5很难,你应该看看ES6规范——我有时想知道他们是否真的希望人们看不懂它)。@Derek朕會功夫: 归结起来就是:
new
始终运行您赋予它的函数,因此参数是可选的(与函数调用不同,在函数调用中,您需要参数来告诉引擎您是在引用函数对象还是在调用函数).jslint抱怨构造函数上缺少paren,因为按下额外的3个键会使代码更具可读性…[SHIFT]+[9]+[0]=3个键;)看看字符串(新的C)。查看输出对象的文本。这很像一个新的Sting(“文本”),但是使用构造函数而不是字符串作为构造函数。我只见过字符串这样做,但它可能也发生在数字上。使用bind()时也会产生同样的效果。我想要一种方法来反转函数上的参数,使我能够预绑定除数据之外的所有内容,通常先绑定数据,方法是说cb=f.bind(true,“Titles”,6);为了检测它,if(this==true)显然毫无价值,而this==true是false,所以我不得不说if(String(this)==true)来检测这个布尔值的界限。。。
function B(){}

function A(){
    return B;
}

function C(){
    return "text";
}

new A;         //function B(){}
new C;         //C {}