重构slice
第一步:判断传过来的值是否是数字方法
function isNumber(obj) {
return !isNaN(Number(obj)) && isFinite(obj)
}
第二步:解决负数问题方法
function isPositive(obj) {
if (Math.sign(obj.num) === -1) {
obj.num = obj.self.length - Math.abs(obj.num)
return obj.num
}
return obj.num
}
第三步:截取方法
function cutOut(obj) {
let result = obj.value
for (let i = obj.start; i < obj.end; i++) {
result[result.length]=obj.self[i]
}
return result
}
第四步:重构slice方法
function mySlice(start, end) {
let self = this
start || (start = 0)
end || (end = this.length)
start = isPositive({self,num:start})
end = isPositive({self,num:end})
if (isNumber(start) && isNumber(end)) {
let result = cutOut({ value: [], start, end, self })
if (Object.prototype.toString.call(self) === '[object String]') {
result = result.join('')
}
return result
}
}
第五步:封装推送到原型
Array.prototype.mySlice = mySlice
String.prototype.mySlice = mySlice