我在看一道构造函数的题目,该题目是这样子的:
在String()构造器不存在的情况下自定义一个MyString()的构造函数,记住由于String()不存在,因此编写构造器时不能使用String内建的方法与属性,并且要让您所创建的对象通过以下测试:
var s = new Mystring('hello');
……………………
s.split('e');
["h","llo"]s.split('l');
["he","","o"]
提示说可以用数组模拟字符串实现,题目中的其他方法和属性我已经实现了,唯独split()不知道怎么实现,想在这里问问有什么实现办法,谢谢。
把字符串转换为字符数组,然后找到分割字符的下标index,0-index-1 构成一个字符串,index+1-length-1构成另外一个字符串。
function MyString(str){
var arr = str.split('');
arr.toString = function(){
return arr.join('');
}
arr.valueOf = function(){
return arr.toString();
}
arr.charAt = function(index){
return arr[parseInt(index)];
}
arr.concat = function(conStr){
return str+conStr;
}
arr.slice = function(start, end){
if (end < 0){
end = arr.length-1;
}
var substring = '';
for(var i=0; i<arr.length; i++){
if(i>=start && i<end){
substring += arr[i];
}
}
return substring;
}
arr.split = function(splitStr){
var splitArr = [];
var i, j,start;
for(i=0, start=i; i<arr.length; i++){
for(j=0; j<splitStr.length && (i+j)<arr.length; j++){
if(arr[i+j] != splitStr[j])
break;
}
if (j == splitStr.length){
var substring = arr.slice(start, i);
splitArr.push(substring);
start = (i+j);
}
}
if(start < i){
var substring = arr.slice(start, i);
splitArr.push(substring);
}
return splitArr;
}
arr.reverse = function(){
for(var i=0, j=arr.length-1; i<j; i++,j--){
var tp = arr[i];
arr[i] = arr[j];
arr[j] = tp;
}
return arr;
}
return arr;
}
var string = new MyString('hello');
console.log(string.length);
console.log(string[0]);
console.log(string.charAt(1));
console.log(string.charAt('2'));
console.log(string.charAt('e'));
var conStr = string.concat(' world');
console.log(conStr);
var sliceStr = string.slice(1, 3);
console.log(sliceStr);
sliceStr = string.slice(0, -1);
console.log(sliceStr);
console.log(string.split('e'));
console.log(string.split('l'));
//string.reverse();
console.log(string.reverse().toString());