kevinZee
//首先将myFilter方法添加在数组的原型之上,达到和filter,sort等方法在任意数组实例上调用的效果
//这个callback就是你在调用myFilter这个方法的时候传进去的函数
Array.prototype.myFilter = function (callback) {
//定义一个空数组用于返回结果数组
var array = [];
//遍历当前的数组实例,也就是this
for (var i = 0; i < this.length; i++) {
//执行callback,将本次循环的数组的元素,当前元素的下标和数组实例本身作为参数传给callback
//callback需要返回一个布尔值
if (callback(this[i],i,this)) {
//当callback执行结果为真时,表明当前元素符合条件
//将当前的这个数组元素添加进结果数组
array.push(this[i]);
}
}
//返回结果数组
return array;
}
//创建一个数组实例testArr
var testArr = [1,2,3,4,5,6];
//调用myFilter方法,并传入一个函数
testArr.myFilter(function(a){
//这个函数的形参a其实就是数组的一项
//你可以看上面的myFilter的具体实现,因为myFilter调用后,会遍历调用myFilter的数组实例
//那么在每一次循环的过程中,都会将数组的当前一项作为参数传递给当前函数
//则此函数执行的结果是真是假,就会影响结果数组的元素
return a>3;
})因为这个a是这个回调函数的参数,上面我写了一个简单的myFilter方法实现了类似filter的功能这个函数在执行循环的时候,会调用这个callback,并将当前的数组项传入