如何为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
相关产品推荐
相关产品推荐

