其实这个东西吧,可以用来做一定的兼容处理,但更多是为了加深对语言本身的理解,毕竟原生方法更高效,锻炼一下你灵活运用语言的能力
(1)字符串repeat
String.prototype.repeat_num = function(n){
return new Array(n+1).join(this + " ");
}
console.log("weidapao".repeat_num(3));
ES6引入了原生字符串方法 repeat()
(2)模拟Array的sort()
对字符串数组进行排序
var testArr = ['a','bb','ccc','dd','hhhhh','gggg'];
console.log(testArr.sort(function(a,b){
return a.length - b.length;
}))
可以对数字与字符串数组进行排序
Array.prototype.sort = function(fn){
var arr = this;
var len = this.length,temp;
for(var i = 0;i < len -1;i++){
var isSorted = true;
for(var j = 0;j < len - i -1;j++){
if(fn(arr[j],arr[j+1]) > 0){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
isSorted = false;
}
}
if(isSorted){
break;
}
}
return arr;
}
console.log([10,9,7,8,6,4,3,12,40].sort(function(a,b){
return a - b;
}))
(4)实现一个方法对以空格分隔的单词进行首字母转大写,直接写入字符串原型方法
能够优化的地方在于使用箭头函数,链式操作,然后注意箭头函数中this指向的问题,匿名函数中this指向调用者,是在执行时绑定,箭头函数中是在声明时绑定,始终指向函数的宿主对象
1. 不优化的方法
String.prototype.capitalize = function(){
let strToArr = this.split(' '); //将字符串通过空格转为数组
let tempArr = [];
for(let i = 0;i < strToArr.length;i++){
tempArr[i] = strToArr[i].charAt(0).toUpperCase() + strToArr[i].slice(1);
}
return tempArr.join(' '); //将数组还原为字符串
2. 使用ES5链式操作
String.prototype.capitalize = function(){
var tempArr = this.split(' ').map(function(item,index){
return item = item.charAt(0).toUpperCase() + item.slice(1);
}).join(' ');
return tempArr;
}
3. 链式操作加箭头函数
String.prototype.capitalize = function(){
let tempArr = this.split(' ').map((item,index)=>{
return item = item.charAt(0).toUpperCase() + item.slice(1);
}).join(' ');
return tempArr;
}
console.log(introduce.capitalize()); //I Am Very Good At Hunter
4. 找到数组中的最大值
需要注意的点是第一种利用了apply传参为数组,第四种使用splice(-1)从最后以为删除了排序后的最大数,因为返回的包含了被删除项的数组,所以从第一位进行索引