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

执行console.log(new X())时输出指定字符串的技术实现疑问

问题解答

这不是陷阱题,本质是考察你对JavaScript中new操作符工作机制的掌握。

为什么你的写法没用?

当用new调用构造函数时,存在返回值的判定规则:

  • 如果构造函数返回的是对象类型(比如Object、Array、包装对象等),new会直接返回这个对象;
  • 如果返回的是字符串、数字这类原始类型,new会忽略这个返回值,转而返回它内部创建的构造函数实例。

你之前返回的是原始字符串"Hello",属于第二种情况,所以new X()最终返回的是X的实例,而非你写的字符串。

两种可行解法

解法1:返回对象类型的字符串

让构造函数返回String包装对象(属于对象类型),这样new会直接返回它,console.log输出时会显示目标字符串:

function X() {
  return new String("Hello");
}

解法2:重写实例的toString方法

console.log输出对象时,会自动调用对象的toString方法。我们可以给X的原型添加自定义的toString方法,让实例被输出时返回目标字符串:

function X() {}
X.prototype.toString = function() {
  return "Hello";
};

如果用ES6类的写法会更简洁:

class X {
  toString() {
    return "Hello";
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:58:17