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

JavaScript call()函数问题:非字符串this转字符串及toString触发原理

问题解答

等价写法勘误

你提到的等价写法是不成立的:

({ toString: function toString() { return 'abcdef'; }}).toUpperCase()

以上代码直接运行会抛出Uncaught TypeError: (...).toUpperCase is not a function错误,原因是普通对象的原型链上不存在toUpperCase方法。你示例中的效果是通过call方法,显式将String.prototype.toUpperCase的执行上下文this绑定到目标对象上才实现的,二者不能等价。

核心原理说明

String.prototype.toUpperCase是专门处理字符串的原型方法,执行时会遵循ECMAScript规范要求的固定流程:

  • 第一步首先将内部this指向的值强制转换为字符串原始值
  • 当待转换的值为对象类型时,JS引擎会按照对象转原始值的规则,优先调用该对象的toString方法,将返回值作为转换结果

你传入的自定义对象重写了toString方法返回'abcdef',因此转换得到的原始字符串就是'abcdef',后续toUpperCase对该字符串执行全大写处理,最终得到'ABCDEF'的结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:45:02