构造函数返回什么值可以避免返回? [英] What values can a constructor return to avoid returning this?

查看:88
本文介绍了构造函数返回什么值可以避免返回?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当使用 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:


  1. 创建新的原生ECMAScript对象。

  2. 设置 [[Class]] 属性结果(1)对象

  3. 获取 F 的原型属性的值。

  4. 如果 / code>是一个对象,请设置 [[Prototype ]] 属性结果(1)结果(3) 结果(1) c> c> 原始原型对象 07 /#a-15.2.3.1rel =nofollow noreferrer> 15.2.3.1 。

  5. 调用的属性 c> c> F ,提供结果(1) this 参数列表传递给 [[Construct]] 作为
    参数值。

  6. 如果 类型(结果(6))
    对象然后返回结果(6)

  7. 结果(1)

  1. Create a new native ECMAScript object.
  2. Set the [[Class]] property of Result(1) to "Object".
  3. Get the value of the prototype property of F.
  4. If Result(3) is an object, set the [[Prototype]] property of Result(1) to Result(3).
  5. If Result(3) is not an object, set the [[Prototype]] property of Result(1) to the original Object prototype object as described in 15.2.3.1.
  6. Invoke the [[Call]] property of F, providing Result(1) as the this value and providing the argument list passed into [[Construct]] as the argument values.
  7. If Type(Result(6)) is Object then return Result(6).
  8. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆