开始设计
- 首先我们需要在原型对象Array当中,通过prototype 设计一个供 所有数组类型,调用的函数
Array.prototype.myFilter = function(percolator){}
- 既然这个 方法,最终会得到一个新的数组,不会改变原有数组结构,那我们肯定要先设计一个新数组嘛
Array.prototype.myFilter = function(percolator){// 设计一个新数组 let newArr = [];}
- 我们需要得到 currentValue(循环项),这个东西到底如何上手?通过循环得到嘛
- 通过刚刚在原形对象上设计的 myFilter 函数,我们可以对这个数组进行基本的迭代
Array.prototype.myFilter = function(percolator){// 设计一个新数组let newArr = [];// 对当前数组进行迭代;this的指向是数组本身for(let i =0; i<this.length; i++){// this[i] 就代表我们当前的循环项,也就是currentValue}}
- this[i] 就代表我们当前的循环项,也就是currentValue
- 通过刚刚在原形对象上设计的 myFilter 函数,我们可以对这个数组进行基本的迭代
- 那么现在,值得思考的地方就来了
- 我们使用这个for循环,是为了得到循环项,那么这个循环项给谁调用? == 匿名函数percolator
- 这个匿名函数,可以接受三个参数,但是currentValue是必须要的,所以这里我们三个参数都传进去
- 那么,匿名函数应该用在什么位置?
- 我觉得这里应该写个判断,当满足条件的时候,给newArr添加一个元素
- 它需要做什么事情?
- 这个判断,就是匿名函数要做的事情,但是判断不能写死,要让使用者来书写
Array.prototype.myFilter = function(percolator){// 设计一个新数组let newArr = [];// 对当前数组进行迭代;this的指向是数组本身for(let i =0; i<this.length; i++){// this[i] 就代表我们当前的循环项,也就是currentValueif(percolator(this[i],i,this)){ // 当前元素,当前索引,对应数组// 满足条件,给 newArr添加一个元素newArr.push(this[i]);}}// 循环结束,返回新的数组return newArr;}

文章插图
现在我们调用api,myFilter,打印输出

文章插图

文章插图
经验总结扩展阅读
- 8_vue是如何进行数据代理的
- h函数 vue3渲染函数的变化
- Filter Spring中过滤器和拦截器(Interceptor)的区别和联系
- 从0搭建vue3组件库:自动化发布、管理版本号、生成 changelog、tag
- 9_Vue事件修饰符
- 【vue2】Style和Class,条件,列表渲染,双向数据绑定,事件处理
- 从0搭建vue3组件库: 如何完整搭建一个前端脚手架?
- 关于 Vue 中 h 函数的一些东西
- vue3中$attrs的变化与inheritAttrs的使用
- 7_vue的数据代理,双向绑定