调用自定义stringSplit方法时出现‘str.stringSplit is not a function’错误的求助
调用自定义stringSplit方法时出现‘str.stringSplit is not a function’错误的求助
嘿,我来帮你看看这个问题~ 你遇到的str.stringSplit is not a function错误,原因其实很直观:
你当前定义的stringSplit是一个独立的普通函数,并不是JavaScript中String对象的原型方法,所以不能直接用字符串实例str去调用它(也就是str.stringSplit()这种写法不成立)。
下面给你两种解决思路,还顺便补全了你原函数中缺失的逻辑(原函数只处理了分隔符为空的情况,其他场景没有返回值):
方案一:直接调用普通函数
把字符串和分隔符作为参数传入函数即可,这是最直接的修改方式:
const str = '7The quick 8brown jhbjhb 78646845fox jum56ps.'; function stringSplit(str, delimiter) { var substrings = []; // 处理分隔符为空的情况 if (delimiter === '') { for (var i = 0; i < str.length; i++) { substrings.push(str[i]); } return substrings; } // 补充分隔符不为空的处理逻辑 let currentSubstring = ''; const delimiterStr = String(delimiter); // 统一转为字符串,避免类型问题 for (var j = 0; j < str.length; j++) { const char = str[j]; if (char === delimiterStr) { substrings.push(currentSubstring); currentSubstring = ''; } else { currentSubstring += char; } } // 把最后一段未分割的内容加入数组 substrings.push(currentSubstring); return substrings; } // 直接调用函数,传入目标字符串和分隔符 console.log(stringSplit(str, 7));
方案二:转为String原型方法
如果你想保留str.stringSplit()这种调用形式,可以把函数挂载到String的原型上,这样所有字符串实例都能使用这个方法:
const str = '7The quick 8brown jhbjhb 78646845fox jum56ps.'; // 将方法挂载到String原型 String.prototype.stringSplit = function(delimiter) { var substrings = []; const str = this; // this指向调用该方法的字符串实例 // 处理分隔符为空的情况 if (delimiter === '') { for (var i = 0; i < str.length; i++) { substrings.push(str[i]); } return substrings; } // 补充分隔符不为空的处理逻辑 let currentSubstring = ''; const delimiterStr = String(delimiter); for (var j = 0; j < str.length; j++) { const char = str[j]; if (char === delimiterStr) { substrings.push(currentSubstring); currentSubstring = ''; } else { currentSubstring += char; } } substrings.push(currentSubstring); return substrings; } // 现在可以用字符串实例直接调用方法了 console.log(str.stringSplit(7));
备注:内容来源于stack exchange,提问作者adila maloul
相关产品推荐
相关产品推荐

