首页 >web前端 >js教程 >为什么构造函数有时会返回非 this 值?

为什么构造函数有时会返回非 this 值?

Susan Sarandon
Susan Sarandon原创
2024-11-11 12:53:021077浏览

Why Does a Constructor Function Sometimes Return a Non-this Value?

构造函数中非 this 返回的奇怪情况

当使用 new 关键字调用构造函数时,通常假设该函数将返回新创建的目的。但是,在特定情况下,可以返回非 this 值。

在 JavaScript 中,控制此行为的确切条件在 ECMAScript 规范的函数对象的内部 [[Construct]] 属性中定义。调用时,此属性执行以下步骤:

  1. 创建一个新对象。
  2. 将其 [[Class]] 属性设置为“对象”。
  3. 检索来自构造函数的原型属性的值。
    4-5。将新对象的 [[Prototype]] 属性设置为原型值(如果它是对象)或原始 Object 原型对象。
  4. 调用构造函数的 [[Call]] 属性,使用新对象如下所示,传递构造函数参数作为其参数。
    7-8。 关键步骤: 如果 Type(Result(6)) 不是对象,则返回新对象,否则返回 Result(1)(即步骤 1 中创建的新对象)。

因此,构造函数的返回值将决定是否返回新创建的对象:

  • 如果返回值是非对象原语 ,将返回新对象。
  • 如果返回值为任何对象,则返回此值。

用于测试新创建的对象是否与构造函数返回的确实不同,可以检查: (new Foo() instanceof Foo) === false.

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

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