我试图在docs /中了解以下代码的行为:
我在这里看到了这段代码:
function f(){ return f; }
new f() instanceof f; //false
这是因为(根据我的阅读):
当
constructor
返回一个对象时,new
运算符将产生返回的对象
因此,由于f
是function
-,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,直到恒等式!
这是因为此行为是内部[[Construct]]
方法的属性,而不是new
:
1.
obj
使其成为新创建的本机ECMAScript对象。
[...]
8.假设result
是调用的[[Call]]
内部属性的结果F
,提供obj
为this值,并提供传递为[[Construct]]
as的参数列表args
。
9.如果Type(result)
是,Object
则返回result
。
10.返回obj
。
F
是通过new
(f
在您的情况下)调用的函数。由于f
返回对象(步骤8),因此将其返回(步骤9)。如果不是对象,则将返回步骤1中的对象(步骤10)。
new
简单地返回返回的内容[[Construct]]
:
5.返回调用
[[Construct]]
内部方法的结果[...]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句