return除了this使用new关键字调用构造函数时,Java语言中的语句可以返回值的确切情况是什么?
return
this
new
例:
function Foo () { return something; } var foo = new Foo ();
如果我没记错的话,如果它something是一个非函数原语,this将被返回。否则something返回。这个对吗?
something
换句话说,什么值可以something引起(new Foo () instanceof Foo) === false?
(new Foo () instanceof Foo) === false
确切的条件在[[Construct]]内部属性上进行了描述,该属性由new操作员使用:
[[Construct]]
来自ECMA-262第3条。版本规格:
13.2.2 [[Construct]] 调用对象的[[Construct]]属性时,将执行以下步骤:Function``F 创建一个新的本机ECMAScript对象。 2. 将的[[Class]]属性设置Result(1)为"Object"。 获取的prototype属性值F。 4. 如果Result(3)是对象,请将的[[Prototype]]属性设置Result(1)为Result(3)。 5. 如果Result(3)不是对象,则按15.2.3.1中所述将[[Prototype]]属性设置Result(1)为原始Object原型对象。 6. 调用的[[Call]]属性F,将其提供Result(1)为this值,并提供传入的参数列表[[Construct]]作为参数值。 如果[Type](http://bclary.com/2004/11/07/#a-8)(Result(6))是, Object则返回Result(6)。 返回Result(1)。
13.2.2 [[Construct]]
调用对象的[[Construct]]属性时,将执行以下步骤:Function``F
Function``F
[[Class]]
Result(1)
"Object"
F
Result(3)
[[Prototype]]
Object
[[Call]]
[Type](http://bclary.com/2004/11/07/#a-8)(Result(6))
Result(6)
查看步骤7和8,仅当Result(6)(F构造函数返回的值)类型 不是 Object时,才返回新对象。