构造函数返回对象-文档澄清吗?

罗伊·纳米尔(Roi Namir)

我试图在docs /中了解以下代码的行为:

我在这里看到了这段代码

 function f(){ return f; }
 new f() instanceof f;          //false

这是因为(根据我的阅读):

constructor返回一个对象时new运算符将产生返回的对象

因此,由于ffunction-,new操作员将产生返回的对象f在这种情况下

所以 : new f() === f

因此:f instanceof f// false。

问题 :

我正在docs中搜索此行为描述,但找不到它。

我只在mdn中找到部分答案

在此处输入图片说明

但是-查看文档(这是我真正追求的):

它只说:

在此处输入图片说明

没有提到constructor退货的情况object or not(我敢肯定我很想念它)

问题:在文档中哪里说明了行为?

nb,

我知道构造函数不应(通常)返回任何东西,这个问题是为了了解。

nb2:

此行为的示例:

var z = {a: 2}; 
function g() { return z; } 
var x = new g(); 
x === z;  //true

在这里,x实际上等于z,直到恒等式!

费利克斯·克林(Felix Kling)

这是因为此行为是内部[[Construct]]方法的属性,而不是new

1.obj使其成为新创建的本机ECMAScript对象。
[...]
8.假设result是调用的[[Call]]内部属性的结果F,提供obj为this值,并提供传递为[[Construct]]as的参数列表args
9.如果Type(result)是,Object返回 result
10.返回 obj

F是通过newf在您的情况下)调用的函数由于f返回对象(步骤8),因此将其返回(步骤9)。如果不是对象,则将返回步骤1中的对象(步骤10)。

new简单地返回返回的内容[[Construct]]

5.返回调用[[Construct]]内部方法的结果[...]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章