return如何影响创建不带括号的对象的过程?
How does return affect the process of creating an object without parentheses
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
是"自动"执行的,一个解释将是伟大的。谢谢。
new A
和new A()
只是语法上的一个怪癖,它们是完全相等的。如果你去掉括号,就好像你把它们包括进去了一样。创建新对象,给定原型A.prototype
,然后用新对象this
调用A
。只有当你有参数要传递给构造函数时,才需要括号。
return如何影响创建不带括号的对象的过程
构造函数的返回值不受是否在new
表达式中使用()
的影响。同样,new A
和new A()
是完全等价的。
构造函数的返回值是这样的(不管是否使用()
): new
操作符创建一个对象,new
表达式的结果是对该对象的引用,除非构造函数返回一个非null
对象引用。如果它返回任何原语(如"text"
)或null
,它的返回值是,被new
运算符完全忽略, new
表达式的结果是new
创建的对象。只有当构造函数返回一个非null
对象引用时,new
才会返回它所创建的对象以外的任何东西;在这种情况下,new
表达式的结果是构造函数返回的对象引用。此异常可以返回满足new
语义的现有对象,而不是新对象。
所有血腥的细节都在规范中,§11.2.2和§13.2.2(以冗长的文字)。
相关文章:
- 为effect Composer创建GodRays效果过程
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 如何在初始化过程中引用同一对象内的对象字段
- Python Javascript哈希库,以确保JSON对象在传输过程中不会损坏
- 在异步函数调用过程中,当对象的属性值发生变化时,JavaScript中的对象属性值会发生什么变化
- 在拖动过程中更改jQuery可拖动辅助对象
- 为什么在参数传递过程中未评估javascript哈希对象
- 如何在对象构造过程中使用对象中的动态键名
- 如何在动画过程中检查一个对象是否正在撞击另一个对象
- 根据对象创建过程中的参数,选择对象具有的方法集
- return如何影响创建不带括号的对象的过程?
- 将过程代码合并到关联数组对象
- 在json序列化过程中忽略对象属性
- 如何在异步处理过程中解析对象
- 跟踪javascript对象在递归过程中何时升级
- 如何在创建过程中引用同一个对象的属性?
- ng类中的连字符's对象键在编译过程中导致语法错误..但不会打碎任何东西