一尘不染

构造函数可以返回什么值以避免返回此值?

javascript

return除了this使用new关键字调用构造函数时,Java语言中的语句可以返回值的确切情况是什么?

例:

function Foo () {
  return something;
}

var foo = new Foo ();

如果我没记错的话,如果它something是一个非函数原语,this将被返回。否则something返回。这个对吗?

换句话说,什么值可以something引起(new Foo () instanceof Foo) === false


阅读 323

收藏
2020-04-25

共1个答案

一尘不染

确切的条件在[[Construct]]内部属性上进行了描述,该属性由new操作员使用:

来自ECMA-262第3条。版本规格:

13.2.2
[[Construct]]

调用对象的[[Construct]]属性时,将执行以下步骤:Function``F

  1. 创建一个新的本机ECMAScript对象。
    2.
    将的[[Class]]属性设置Result(1)"Object"
  2. 获取的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]]作为参数值。
  3. 如果[Type](http://bclary.com/2004/11/07/#a-8)(Result(6))是,
    Object则返回Result(6)
  4. 返回Result(1)

查看步骤7和8,仅当Result(6)F构造函数返回的值)类型 不是 Object时,才返回新对象。

2020-04-25