剖析Javascript中forEach()底层原理,如何重写forEach()

我们平时用的forEach()一般是这样用的

var myArr = [1,5,8]

myArr.forEach((v,i)=>{
  console.log(v,i)
})
//运行后是这样的
1 0
5 1
8 2

其实底层还是把数组循环了一边,并且在回调函数里传了每个数组的值和下标

我们先用常规的方法去重写forEach()

// 这里用const来定义函数,主要是为了防止当我们在开发时,如果别人用了这个名字重新给myForEach赋值时就会报错,这样就避免我们写的方法会被别人意外覆盖
const myForEach = function(arr, fn){ let i for(i=0; i<arr.length; i++){ fn(arr[i], i) } }

方法已经写好下面我们来测试一下新forEach()

这里是不是和上面用forEach()的输出完全一致啊

但是调用方法和上面并不一样,那我们怎么把他封装到Array对象里去呢

这样就要用到js里的原型链prototype,其实Javascript中所有的对象都是Object的实例,并继承Object.prototype的属性和方法

 还是直接看代码吧↓

Array.prototype.newForEach = function(fn) {
    let i
    for(i=0; i<this.length; i++){
       fn(this[i], i)
    }      
}

好了开始测试

 

这个就完全和forEach一样啦  good

当我们在开发项目时如果对后台返回的数据数组中每个数据都要做统一处理时,这时候我们就可以重写forEach()

这样大家都可以统一直接用这个方法,开发效率就会大大提高

 

转载于:https://www.cnblogs.com/bobo1/p/11376025.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用介绍了jQuery each和js forEach的用法,并通过实例对比分析了它们的具体使用方法和相关操作注意事项。引用提到在C#语言foreach语句用于遍历数组的元素,并给出了具体的语法形式。而引用指出每一次循环时,从集合取出一个新的元素值,并将其放到只读变量,如果括号的整个表达式返回值为true,则可以执行foreach的语句。 根据这些引用内容,forEach用法是一种循环语句,常用于遍历数组或集合的元素。在JavaScript,可以使用forEach方法来遍历数组,语法形式如下: arr.forEach(function(element) { // 在这里执行对每个元素的操作 }); 而在C#,可以使用foreach语句来遍历数组或集合,语法形式如下: foreach (数据类型 变量名 in 数组名) { // 在这里执行对每个元素的操作 } 需要注意的是,在使用forEachforeach时,可以在循环体执行对每个元素的操作。同时,可以使用break语句来提前结束循环,或使用continue语句来跳过当前循环迭代,进入下一次迭代。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [jQuery each和js forEach用法比较](https://download.csdn.net/download/weixin_38709511/12945810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [c#foreach循环用法详解](https://blog.csdn.net/opencv220/article/details/107403413)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值