我试图在文档中找到/了解以下代码的此行为:
我看到了这段代码here:
function f(){ return f; }
new f() instanceof f; //false
这是因为(来自我read}:
当
constructor
返回对象时,new
运算符将会产生 返回的对象
因为f
是function
- new
运算符会产生返回的对象,在这种情况下为f
所以:new f() === f
因此:f instanceof f
// false。
问题:
我在文档中搜索此行为描述,但无法找到它。
我只在mdn中找到了部分答案:
然而 - 看着docs(这就是我真正追求的):
所有这一切都是:
没有提及constructor
返回object or not
的情况(我确定我错过了它)
问题: 文档在哪里解释了行为?
nb,
我知道构造函数不应该(通常)返回任何东西,这个问题是为了知识。
nb2:
此行为的示例:
var z = {a: 2};
function g() { return z; }
var x = new g();
x === z; //true
在这里,x实际上等于z,直到身份!
答案 0 :(得分:7)
那是因为此行为是internal [[Construct]]
method的属性,而不是new
:
1。让
obj
成为新创建的本机ECMAScript对象 [...]
8.让result
成为调用[[Call]]
的{{1}}内部属性的结果,提供F
作为此值并提供传递到obj
的参数列表作为[[Construct]]
。
9.如果args
为Type(result)
,则返回Object
10. 返回result
。
obj
是通过F
调用的函数(在您的情况下为new
)。由于f
返回一个对象(步骤8),因此返回它(步骤9)。如果它不是对象,则返回步骤1中的对象(步骤10)。
f
只返回new
返回的内容:
5。返回调用
的结果[[Construct]]
内部方法[...]
答案 1 :(得分:3)
答案 2 :(得分:2)
Page 100 here:
... 8让结果成为调用F的[[Call]]内部属性的结果,提供obj作为该值并提供 参数列表作为args传递给[[Construct]]。
9如果Type(result)为Object,则返回结果。
10返回obj。