构造函数返回什么值可以避免返回? [英] What values can a constructor return to avoid returning this?
问题描述
当使用 new
What are the exact circumstances for which a return statement in Javascript can return a value other than this
when a constructor is invoked using the new
keyword?
示例:
function Foo () {
return something;
}
var foo = new Foo ();
如果我没有错误,如果 something
是一个非函数原语,将返回 this
。否则返回 something
。这是正确的吗?
If I'm not mistaken, if something
is a non-function primitive, this
will be returned. Otherwise something
is returned. Is this correct?
IOW,什么值可以某事
引起 ()instanceof Foo)=== false
?
IOW, what values can something
take to cause (new Foo () instanceof Foo) === false
?
推荐答案
code> [[Construct]] 内部属性,由 new
运算符:
The exact condition is described on the [[Construct]]
internal property, which is used by the new
operator:
版本规格:
13.2.2
[[Construct]]
[[Construct]]
属性函数
对象 F
是
调用,执行以下步骤:
When the [[Construct]]
property for a Function
object F
is
called, the following steps are taken:
- 创建新的原生ECMAScript对象。
- 设置
[[Class]]
属性结果(1)
到对象
。 - 获取
F
的原型属性的值。 - 如果
/ code>是一个对象,请设置
[[Prototype ]]
属性结果(1)
到结果(3)
结果(1) c> c> 原始原型
对象
07 /#a-15.2.3.1rel =nofollow noreferrer> 15.2.3.1 。 - 调用的属性 c> c> F ,提供
结果(1)
为this
参数列表传递给[[Construct]]
作为
参数值。 - 如果
类型(结果(6))
是
对象
然后返回结果(6)
。 -
结果(1)
。
- Create a new native ECMAScript object.
- Set the
[[Class]]
property ofResult(1)
to"Object"
. - Get the value of the prototype property of
F
. - If
Result(3)
is an object, set the[[Prototype]]
property ofResult(1)
toResult(3)
. - If
Result(3)
is not an object, set the[[Prototype]]
property ofResult(1)
to the originalObject
prototype object as described in 15.2.3.1. - Invoke the
[[Call]]
property ofF
, providingResult(1)
as thethis
value and providing the argument list passed into[[Construct]]
as the argument values. - If
Type(Result(6))
isObject
then returnResult(6)
. - Return
Result(1)
.
查看步骤7和8,只有当
类型 Result(6)
(从 F
构造函数
函数)是不一个对象。
Look at steps 7 and 8, the new object will be returned only if the
type of Result(6)
(the value returned from the F
constructor
function) is not an Object.
这篇关于构造函数返回什么值可以避免返回?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!