在String构造器不存在的情况下,自定义一个MyString()的构造器函数
function MyString(str){
var index=0;
this._value=''+str;
while(str[index]!==undefined){
this[index]=str[index];
index++;
}
this.length=index;
}
MyString.prototype={
constructor: MyString,
valueOf: function valueOf() {
return this._value;
},
toString: function toString() {
return this._value;
},
charAt: function charAt(n) {
return this._value[parseInt(n,10)||0];
},
indexOf: function indexOf() {
},
concat: function concat() {
var prim=this._value;
for (var i = 0; i < arguments.length; i++) {
prim+=arguments[i];
};
return prim;
},
slice: function slice(start, end){
var result='',original=this.valueOf();
if(start===undefined){
return original;
}
if(start>this.length){
return result;
}
if(start<0){
start=this.length-start;
}
if(end===undefined||end>this.length){
end=this.length;
}
if(end<0){
end=this.length+end;
}
for(var i=start;i<end;i++){
result+=original[i];
}
return result;
},
split: function split(re){
var index=0,
result=[],
original=this.valueOf(),
match,
pattern='',
modifiers='g';
if(re instanceof RegExp){
pattern=re.source;
modifiers+=re.multiline?'m':'';
modifiers+=re.ignoreCase?'i':'';
} else {
pattern=re;
}
re=RegExp(pattern,modifiers);
while(match=re.exec(original)){
result.push(this.slice(index, match.index));
index=match.index+new MyString(match[0]).length;
}
result.push(this.slice(index));
return result;
},
reverse: function reverse(){
return this.valueOf().split('').reverse().join('');
}
};
测试
var s=new MyString('hello');
s.length;
5
s[0]
"h"
s.toString()
"hello"
s.valueOf()
"hello"
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('l')
["he", "", "o"]