4题:在String()构造函数不存在的情况下自定义一个MyString()的构造器函数。记住,由于String()不存在,因此您在写构造器函数时不能使用任何属于内建String对象的方法和属性。并且要让您所创建的对象通过以下测试:
var s = new MyString("hello"); s.length; //5 s[0]; //"h" s.toString(); //"hello" s.valueOf(); //"hello" s.charAt(1); //"e" s.charAt("2"); //"l" s.charAt("e"); //"h" s.concat(" world!"); //"hello world!" s.slice(1,3); //"el" s.slice(0,-1); //"hell" s.split("e"); //["h","llo"] s.split("l"); //["he","","o"]
测试都通过了。代码如下:
function MyString(val){
var list = [],i;
for(i in val){
list[i] = val[i];
}
this.length = list.length;
this.toString=function(){
return list.join('');
};
this.valueOf=function(){
return list.join('');
};
this.charAt=function(index){
return list[isNaN(parseInt(index))?0:(parseInt(index))];
};
this.concat=function(str){
for(var i in str){
list.push(str[i]);
}
return list.join('');
};
this.slice=function(n1,n2){
var s1 = [];
if(n2>n1){
for(var i=n1;i<n2;i++){
s1[i-n1] = list[i];
};
}else if(n2 < 0){
for(var i=n1;i<(list.length + n2);i++){
s1[i-n1] = list[i];
};
}
return s1.join('');
};
this.split = function(val){
var slist = [],plist=[],j=0;
for(var i in list){
if(val != list[i]){
slist.push(list[i]);
}else{
plist.push(slist.join(''));
slist =[];
}
};
plist.push(slist.join(''));
return plist;
};
this.reverse=function(){
var alist =[];
for(var i in list){
alist[i] = list[list.length-1-i]
}
return alist.join('');
}
};```
里面应该都是用的数组的方法,对toString 和 valueOf方法不太了解,我就只做了返回字符串。5题方法也在上面。
热门评论
val[i]不就和问题里面s[0]一样吗,不是不能用string原来就有的方法吗