You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript构造函数显式返回原始值不生效?

为什么JavaScript构造函数返回原始值时,实际返回的是隐式创建的对象?

你遇到的问题本质是JavaScript中new操作符的运行规则导致的,先看你的代码示例:

function Run() {
  this.isRunning = () => {
    return this;
  }
  return 100;
}

const obj = new Run();
console.log(obj === 100); // 实际输出false,而非预期的true

当用new关键字调用构造函数时,JS引擎会按固定逻辑执行:

  1. 隐式创建一个空对象,并将这个对象绑定到构造函数内部的this
  2. 执行构造函数内部的代码(比如你这里给this添加了isRunning方法)
  3. 检查构造函数的返回值类型:
    • 如果返回的是对象类型(包括普通对象、数组、函数、正则等),就直接返回这个对象
    • 如果返回的是原始类型(number、string、boolean、null、undefined、symbol、bigint),则会忽略这个返回值,转而返回第一步中隐式创建的那个对象

你的代码里,Run构造函数返回的100属于number原始类型,所以这个返回值被直接忽略了,obj拿到的是new操作符创建的绑定了this的对象,自然obj === 100会返回false。

如果确实想让函数返回原始值100,不要用new调用,直接执行const result = Run()即可,这时result就是100,但这种情况下构造函数内部的this不会指向新对象(非严格模式下指向全局对象,严格模式下为undefined)。

内容的提问来源于stack exchange,提问作者DecPK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:04:58