我正在从Stoyan Stefanov的书中学习JS OOP。我在第4章的练习4中遇到了问题:
想象一下String()构造函数不存在。创建一个构造函数 函数MyString()尽可能接近String()。 您不允许使用任何内置字符串方法或属性, 并记住String()不存在。您可以使用此代码进行测试 你的构造函数:
下面是我尝试创建String split()方法。你能指导我如何使它发挥作用吗?
function MineString(string){
this.lengthS = string.length;
//this[1] = "test";
for(var i = 0; i < string.length;i++){
this[i] = string.charAt(i);
}
this.toString = function(){
return string;
}
this.split = function(char){
var splitedArray = [];
var foundedChar = [];
var string2 = [];
for (var i = 0; i < this.lengthS ; i++){
foundedChar.push(string[i].indexOf(char));
}
for (var j = 0; j < foundedChar.length; j++){
if(foundedChar[j] === -1){
//splitedArray[0] += string.charAt(j);
//splitedArray[j] = string.charAt(j);
string2 += string.charAt(j);
//splitedArray.push(string2);
splitedArray[foundedChar.length] = string2;
}else if (foundedChar[j] === 0){
//splitedArray.push(string.charAt(j));
}
}
return splitedArray;
}
}
var text = new MineString("hello");
text.split("e");
&#13;
所以text.split(&#34; e&#34;);应该显示如下内容:
var text = new MineString("hello");
text.split("e");
["h","llo"]
&#13;
答案 0 :(得分:1)
您的拆分方法看起来有些过于复杂。我简化了它并重写了类的其他部分,以便它们遵守不使用字符串方法的任务。请参阅jsfiddle或以下代码。
新JS代码:
function MineString(str){
this.str = str;
this.addChar = function(c) {
this.str += c;
}
this.length = function() {
return this.str.length;
}
this.toString = function(){
return this.str;
}
this.split = function(char){
var out = [],
current = new MineString(""),
addCurrent = function() {
if (current.length() > 0) {
out.push(current.toString());
current = new MineString("");
}
};
for (i = 0; i < this.str.length; i++) {
if (this.str[i] == char) {
addCurrent();
} else {
current.addChar(this.str[i]);
}
}
addCurrent();
return out;
}
}
var text = new MineString("hello");
console.log(text.split("e"));
输出:
["h", "llo"]