【前端】JavaScript自定义 forEach方法详解与原理分析

news2025/2/27 14:07:21

在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: 前端

文章目录

  • 💯前言
  • 💯题目演示与效果
    • 演示代码
    • 控制台输出结果
  • 💯代码分析与源理解释
    • 1. 构造函数 `Brray`
    • 2. 实例化 `Brray`
    • 3. 调用自定义的 `forEach`
  • 💯比较与拓展
    • 1. 比较原生的 `Array.prototype.forEach`
    • 2. 为什么自定义很重要?
  • 💯小结


在这里插入图片描述


💯前言

  • 在 JavaScript 中,forEach 方法是数组比较常用的遍历方法之一。它允许对数组中的每一个元素进行操作,并通过回调函数传递相关参数:元素值索引整个数组但在某些场景中,我们需要自定义一个方法,将它添加到自定义对象上。这些操作对于理解构造函数回调函数完成很好的学习任务。
    这篇文章主要分析如何自定义一个相似于原生 forEach 的方法,完成一次数组元素的遍历,并通过结合代码完成对其原理的详细分析。同时,这次结合原生方法和自定义方法的比较,培养学生对运算控制和回调函数的精准理解
    JavaScript在这里插入图片描述

💯题目演示与效果


演示代码

代码涉及自定义的构造函数 Brray ,实现了一个自定义的 forEach方法。以下是演示代码:

<script>
function Brray(arr) {
    this.arr = arr;
    this.forEach = function (callback) {
        for (var i = 0, len = this.arr.length; i < len; i++) {
            callback(this.arr[i], i, this.arr);
        }
    }
}

var newBrray = new Brray([1, 2, 3, 4, 5]);

newBrray.forEach(function (item, idx, arr) {
    console.log(item, idx, arr);
});
</script>

在这里插入图片描述


控制台输出结果

代码执行之后,控制台输出以下内容:

1 0 [1, 2, 3, 4, 5]
2 1 [1, 2, 3, 4, 5]
3 2 [1, 2, 3, 4, 5]
4 3 [1, 2, 3, 4, 5]
5 4 [1, 2, 3, 4, 5]

一个整体的控制台结果是:对数组 [1, 2, 3, 4, 5]的每个元素进行遍历,并在控制台中显示作用的每个元素值、所在的索引以及整个数组。


💯代码分析与源理解释


1. 构造函数 Brray

在代码中,构造函数 Brray 用于创建自定义的数组实例。这个构造函数完成了两件事:

  • 保存一个数组:

    this.arr = arr;
    

    它将构造函数的参数 arr保存在实例的 arr 属性中。

  • 自定义 forEach 方法:

    this.forEach = function (callback) {
        for (var i = 0, len = this.arr.length; i < len; i++) {
            callback(this.arr[i], i, this.arr);
        }
    }
    
    • callback :用户传入的回调函数。
    • for 循环 :用于遍历数组中的每个元素。
    • callback 被调用时传入的参数:
      1. this.arr[i] :当前元素
      2. i :当前元素的索引
      3. this.arr :整个数组

2. 实例化 Brray

通过下面代码,创建了 Brray 的实例并传入数组 [1, 2, 3, 4, 5]

var newBrray = new Brray([1, 2, 3, 4, 5]);

这里,newBrray实际上是一个包含数组的自定义对象,其中包含一个 forEach方法。


3. 调用自定义的 forEach

newBrray.forEach(function (item, idx, arr) {
    console.log(item, idx, arr);
});
  • 调用 forEach 方法,将一个匿名回调函数传入。回调函数接收三个参数:

    1. item :当前数组元素的值。
    2. idx :当前元素的索引。
    3. arr :整个数组。
  • 在每次循环中,调用回调函数并输出元素信息:

    console.log(item, idx, arr);
    

💯比较与拓展


1. 比较原生的 Array.prototype.forEach

原生 forEach 方法的定义也是通过循环调用回调函数,但是它是构建在原型链上的,属于 JavaScript 数组的默认方法。例如:

[1, 2, 3, 4, 5].forEach(function (item, index, array) {
    console.log(item, index, array);
});

2. 为什么自定义很重要?

自定义的 forEach方法应用于不支持原生方法的对象(比如自定义类或其他数据结构),它展示了一种自定义对象的抽象能力。


💯小结

  • 在这里插入图片描述
    这段代码能让学生深刻地理解:
  1. 如何自定义一个方法完成特定功能,比如仿造原生的 forEach
  2. 构造函数与原型链方法之间的区别
  3. 回调函数的演练,包括传入参数的定义与调用模式。

这段代码对于初学者是一段很好的练习,它不仅认识原理,还培养了自定义技能


在这里插入图片描述


在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261277.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于卷积神经网络的Caser算法

将一段交互序列嵌入到一个以时间为纵轴的平面空间中形成“一张图”后&#xff0c;基于卷积序列嵌入的推荐&#xff08;Caser&#xff09;算法利用多个不同大小的卷积滤波器&#xff0c;来捕捉序列中物品间的点级&#xff08;point-level&#xff09;、联合的&#xff08;union-…

挑战一个月基本掌握C++(第三天)了解注释、数据类型、变量

一 C注释 程序的注释是解释性语句&#xff0c;您可以在 C 代码中包含注释&#xff0c;这将提高源代码的可读性。所有的编程语言都允许某种形式的注释。 C 支持单行注释和多行注释。注释中的所有字符会被 C 编译器忽略。 C 注释一般有两种&#xff1a; // - 一般用于单行注释…

211-基于FMC的1路1.5G ADC 1路 2.5G DAC子卡

一、板卡概述 FMC-1AD-1DA-1SYNC是我司自主研发的一款1路1G AD采集、1路2.5G DA回放的FMC、1路AD同步信号子卡。板卡采用标准FMC子卡架构&#xff0c;可方便地与其他FMC板卡实现高速互联&#xff0c;可广泛用于高频模拟信号采集等领域。 二、功能介绍 2.1 原理框图 2.2 硬件…

Cloudlog 电台日志系统 request_form SQL注入漏洞复现

0x01 产品简介 Cloudlog 是一个自托管的 PHP 应用程序,可让您在任何地方记录您的业余无线电联系人。使用PHP和MySQL构建的基于Web的业余无线电记录应用程序支持从HF到微波的一般站记录任务。 0x02 漏洞概述 Cloudlog request_form 接口存在未授权SQL注入漏洞,未经身份验证…

Jenkins容器使用宿主机Docker(五)

DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装&#xff08;三&#xff09; Harbor镜像仓库介绍&安装 &#xff08;四&#xff09; Jenkins容器使用宿主机Docker&#xff08;五&#xff09; Jenkins流水线初体验&#xff08;六&#…

【大模型】LLaMA-2:Open Foundation and Fine-Tuned Chat Models, July. 2023.

论文&#xff1a;LLaMA-2&#xff1a;Open Foundation and Fine-Tuned Chat Models, July. 2023. 链接&#xff1a;https://arxiv.org/abs/2307.09288 Introduction 创新点 7B - 70B 预训练 微调 开源Llama 2 和Llama 2-Chat&#xff0c;针对对话用例进行了优化Motivation A…

Jmeter直连数据库,jar包下载

运行报错信息&#xff1a;jmeter连接mysql异常&#xff1a;Cannot load JDBC driver class ‘com.mysql.jdbc.Driver‘ 1、下载地址&#xff1a; https://mvnrepository.com/artifact/mysql/mysql-connector-java/ 2、将下载好的jar包 &#xff08;我的是&#xff1a;mysql-con…

安全攻击平台介绍

目录 XSS攻击平台 Attack API BeEF XSS-Proxy 漏洞平台 cnvd 阿里云漏洞库 攻防演练平台 XCTF 攻防平台 零日靶场&#xff08;0ops&#xff09; 安恒靶场&#xff08;赛宁安全&#xff09; XSS攻击平台 XSS Payload如此强大&#xff0c;为了使用方便&#xff0c;有安…

webpack处理图片资源

过去在Webpack4时&#xff0c;我们处理图片资源通过file-loader和url-loader进行处理。 现在Webpack5已经将两个Loader功能内置到Webpack里了&#xff0c;我们只需要简单配置即可处理图片资源。 1. 配置 //webpack.config.js const path require("path");module.…

QT数据库(四):QSqlRelationalTableModel 类

关系数据库概念 例如下列departments、majors、studInfo 这 3 个数据表之间存在关系。 主键与外键 标记“**”的是主键字段&#xff0c;标记“*”的是外键字段。主键字段是一个数据表中表示记录唯一性的字段&#xff0c;例如 studInfo 数据表中的 studID 字段。外键字段是与其…

深入C语言文件操作:从库函数到系统调用

引言 文件操作是编程中不可或缺的一部分&#xff0c;尤其在C语言中&#xff0c;文件操作不仅是处理数据的基本手段&#xff0c;也是连接程序与外部世界的重要桥梁。C语言提供了丰富的库函数来处理文件&#xff0c;如 fopen、fclose、fread、fwrite 等。然而&#xff0c;这些库…

【HarmonyOS NEXT】ArkTs数据类型解析与使用

1. 背景 为什么设计ArkTS&#xff1f; 1.1 其它语言有版权【Java&#xff1f;Kotlin&#xff1f;】以及历史问题【Java内存&#xff1f;】 1.2 生态&#xff0c;可复用前端生态的三方库&#xff0c;兼容JS/TS语言生态ArkTs解决了JS/TS中的哪些问题&#xff1f; 2.1 **程序健壮性…

H5 scss 移动端的样式适配

在移动端样式的scss文件中&#xff0c;出现了这些变量 env() 与 constant() 设置安全区域&#xff0c;是css里IOS11新增的属性&#xff0c;webkit的css函数&#xff0c;用于设定安全区域与边界的距离&#xff0c;有4个预定义变量&#xff1a; safe-area-inset-left: 安全区域距…

YOLOv5与ViT目标检测中的热力图应用教程

文章目录 前言一、热力图介绍1、热力图应用说明2、热力图代码整体思路3、实验效果二、heatmap类解读三、GradCAM、GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiResCAM, LayerCAM等类源码解读1、GradCAM类源码2、BaseCAM类源码解读1、BaseCAM源码2、forward函数源码解读ou…

组织病理学图像的再识别|文献速递-生成式模型与transformer在医学影像中的应用

Title 题目 Re-identification from histopathology images 组织病理学图像的再识别 01 文献速递介绍 在光学显微镜下评估苏木精和伊红&#xff08;H&E&#xff09;染色切片是肿瘤病理诊断的标准程序。随着全切片扫描仪的出现&#xff0c;能够将玻璃切片数字化为所谓的…

如何用重构解锁高效 Vue 开发之路

文章目录 摘要引言什么是代码重构为什么要减少重复逻辑Vue 示例代码问题场景初始代码的痛点重构后的通用组件 TaskList.vue详细说明 重用通用组件详细说明 模拟数据与运行结果 QA环节总结参考资料 摘要 代码重构是改善代码质量的重要手段&#xff0c;特别是在减少重复逻辑方面…

用户发送请求后服务端i/o工作过程

华子目录 服务端i/o介绍磁盘i/o机械磁盘的寻道时间、旋转延迟和数据传输时间常见的机械磁盘平均寻道时间值常见磁盘的平均延迟时间每秒最大IOPS的计算方法 网络i/o网络I/O处理过程磁盘和网络i/o 一次完整的请求在内部的执行过程 服务端i/o介绍 i/o在计算机中指Input/Output&am…

QT c++ 测控系统 一套报警规则(上)

本文适用于pc based的测控系统的上位机&#xff0c;定义了一套报警规则。 由5个部分组成&#xff1a;自定义4布尔类、在全局文件定义工位错误结构体和结构体变量&#xff0c;其它地方给此变量的当前值成员赋值&#xff0c;报警线程类、数据库保存类、弹框类。 1.自定义4布尔类…

概率论得学习和整理24:EXCEL的各种图形,统计图形

目录 0 EXCEL的各种图形&#xff0c;统计图形 1 统计图形 / 直方图 / 其实叫 频度图 hist最合适(用原始数据直接作图) 1.1 什么是频度图 1.2 如何创建频度图&#xff0c;一般是只选中1列数据&#xff08;1个数组&#xff09; 1.3 如何修改频度图的宽度 1.4 hist图的一个特…