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

字符串原型中无法赋值this,如何为字符串对象设置新值?

字符串原型方法无法修改原字符串的原因及解决方案

核心原因

  1. 字符串是不可变的原始值:JavaScript里字符串属于原始值类型,一旦创建就不能被修改。调用字符串原型方法时,JS会临时把原始字符串包装成String对象,但这个包装对象只是临时存在,方法执行完就会被销毁,无法改变原字符串。
  2. this是只读变量:无论在什么函数中,this都是只读的,直接给this赋值必然报错,这和类型无关。
  3. 数组是可变引用类型:数组属于引用类型,this.push是直接修改数组对象的内部数据,所以能直接改变原数组。

正确解决方案:返回新字符串并重新赋值

因为字符串不可变,原型方法只能生成新字符串并返回,由调用者将新值重新赋值给原变量。修改你的代码示例:

function testfunction() {
    const newValue = "new test";
    console.log(newValue);
    return newValue;
}

Object.defineProperty(String.prototype, 'testfunction', { value: testfunction, enumerable: true });

let s = "i am a test";
s = s.testfunction(); // 重新赋值给原变量
console.log(s); // 输出 "new test"

如果需要基于原字符串做修改(比如拼接、替换),可以利用this自动转换为原始值的特性:

function append(str) {
    return this + str;
}

String.prototype.append = append;

let s = "hello";
s = s.append(" world!");
console.log(s); // 输出 "hello world!"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:52:08