首页 >web前端 >js教程 >当 JavaScript 构造函数返回非对象值时会发生什么?

当 JavaScript 构造函数返回非对象值时会发生什么?

Patricia Arquette
Patricia Arquette原创
2024-11-13 10:16:02258浏览

What Happens When a JavaScript Constructor Returns a Non-Object Value?

理解 JavaScript 中的构造函数返回值

在 JavaScript 中,使用 new 关键字调用构造函数来创建新对象。虽然构造函数通常返回 this,但某些条件可能会导致返回不同的值。

返回非此值的情况

行为由内部 [ 定义[Construct]] new 运算符使用的属性。根据 ECMA-262 第三版规范:

第 7 步: 如果构造函数(Result(6))返回值的类型是 not一个对象,返回 Result(6)。
第 8 步: 否则,返回 Result(1)(新对象)。

示例:

考虑以下构造函数:

function Foo() {
  return 1;
}

当用 new 调用时,会发生以下步骤:

  • 创建一个新对象,并将 Foo 的原型设置为其原型原型。
  • Foo.call(newObj, args) 被调用(在本例中,没有参数)。
  • Foo 返回 1。
  • 因为 1 不是对象,第 7 步被执行,构造函数返回 1。

因此, (new Foo() instanceof Foo) === false 因为 Foo 返回了一个数字,不是对象。

结论:

当构造函数返回非对象值(例如,基元、null、未定义)时,不会返回 this,并且而是返回构造函数的返回值。

以上是当 JavaScript 构造函数返回非对象值时会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn