//首先將myFilter方法添加在數(shù)組的原型之上,達(dá)到和filter,sort等方法在任意數(shù)組實(shí)例上調(diào)用的效果
//這個(gè)callback就是你在調(diào)用myFilter這個(gè)方法的時(shí)候傳進(jìn)去的函數(shù)
Array.prototype.myFilter?=?function?(callback)?{
????//定義一個(gè)空數(shù)組用于返回結(jié)果數(shù)組
????var?array?=?[];
????//遍歷當(dāng)前的數(shù)組實(shí)例,也就是this
????for?(var?i?=?0;?i?<?this.length;?i++)?{
????????//執(zhí)行callback,將本次循環(huán)的數(shù)組的元素,當(dāng)前元素的下標(biāo)和數(shù)組實(shí)例本身作為參數(shù)傳給callback
????????//callback需要返回一個(gè)布爾值
????????if?(callback(this[i],i,this))?{
????????????//當(dāng)callback執(zhí)行結(jié)果為真時(shí),表明當(dāng)前元素符合條件
????????????//將當(dāng)前的這個(gè)數(shù)組元素添加進(jìn)結(jié)果數(shù)組
????????????array.push(this[i]);
????????}
????}
????//返回結(jié)果數(shù)組
????return?array;
}
//創(chuàng)建一個(gè)數(shù)組實(shí)例testArr
var?testArr?=?[1,2,3,4,5,6];
//調(diào)用myFilter方法,并傳入一個(gè)函數(shù)
testArr.myFilter(function(a){
????//這個(gè)函數(shù)的形參a其實(shí)就是數(shù)組的一項(xiàng)
????//你可以看上面的myFilter的具體實(shí)現(xiàn),因?yàn)閙yFilter調(diào)用后,會(huì)遍歷調(diào)用myFilter的數(shù)組實(shí)例
????//那么在每一次循環(huán)的過程中,都會(huì)將數(shù)組的當(dāng)前一項(xiàng)作為參數(shù)傳遞給當(dāng)前函數(shù)
????//則此函數(shù)執(zhí)行的結(jié)果是真是假,就會(huì)影響結(jié)果數(shù)組的元素
????return?a>3;
})
因?yàn)檫@個(gè)a是這個(gè)回調(diào)函數(shù)的參數(shù),上面我寫了一個(gè)簡(jiǎn)單的myFilter方法實(shí)現(xiàn)了類似filter的功能
這個(gè)函數(shù)在執(zhí)行循環(huán)的時(shí)候,會(huì)調(diào)用這個(gè)callback,并將當(dāng)前的數(shù)組項(xiàng)傳入