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

如何为String对象扩展自定义函数?遇原型只读错误求解

问题解决办法

报错原因

你遇到的String prototype is read only, properties should not be added错误,一般是代码运行环境启用了禁止修改内置对象原型的规则(比如ESLint的no-extend-native),或者处于严格模式限制下,不允许扩展原生String的原型。

两种解决思路

思路1:调整规则,修正原型方法逻辑

如果你的环境允许修改内置原型,先修正代码逻辑——作为String的原型方法,应该用this指代调用方法的字符串实例,而非传参:

// 直接扩展String原型,无需包装函数
String.prototype.repeatCharacters = function() {
  return this.split('').map(char => char.repeat(2)).join('');
};

// 使用示例
console.log("hello".repeatCharacters()); // 输出 "hheelllloo"

思路2:改用独立工具函数(推荐,避免污染内置原型)

如果不能修改内置原型,直接写一个独立函数处理字符串:

function repeatCharacters(str) {
  return str.split('').map(char => char.repeat(2)).join('');
}

// 使用示例
console.log(repeatCharacters("hello")); // 输出 "hheelllloo"

补充说明

你原来的代码逻辑存在不合理之处:把方法挂载到String原型后,却要求传入字符串参数,这不符合原型方法的使用逻辑——原型方法是通过字符串实例调用的,此时this就是当前字符串,不需要额外传参。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:13:13