当前位置: 首页 > news >正文

前端手写贴

前端手写。

要理解JavaScript底层规律,本帖将会更新手写相关内容,顺道巩固知识体系。

 一、函数控制

1. 防抖(Debounce):延迟执行,触发间隔小于阈值则重置计时。  

2. 节流(Throttle):固定间隔内仅执行一次,稀释高频操作。  

3. 函数柯里化:分步传参,返回新函数直至参数满足要求。  

 二、对象操作

1. 拷贝方法  

    浅拷贝:仅复制一层属性。  

    深拷贝:  

      JSON拷贝:JSON.parse(JSON.stringify())(不支持函数/循环引用)。  

      递归拷贝:递归复制嵌套属性。  

      MessageChannel:利用跨线程通信的异步深拷贝。  

      structuredClone:浏览器原生深拷贝 API。  

2. 对象处理  

    判断对象相同:递归比较键值与类型。  

    对象去重:基于唯一标识(如 JSON.stringify)使用 Set/Map 去重。  

    扁平化:递归展开嵌套数组/对象。  

 三、原型与继承

1. 核心机制  

    手写new:创建对象、绑定原型、执行构造函数。  

    new.target:检测函数是否通过 new 调用。  

    手写create:模拟 Object.create() 实现原型继承。  

2. 继承方式  

    原型链继承:Child.prototype = new Parent()。  

    盗用构造函数:在子类构造函数中调用父类构造函数。  

    组合继承(原型链+构造函数)。  

    原型式继承:Object.create()。  

    寄生组合继承(盗用构造函数 + create)。  

    ES6 extends:语法糖实现最优继承。  

3. 原型检查  

    手写instanceof:递归检查原型链。  

    isPrototypeOf:判断对象是否在另一对象原型链上。  

    Symbol 与 Iterator:自定义迭代行为与唯一标识。  

 四、异步处理

1. Promise 实现  

    Promise.all:全部成功则返回结果数组,否则失败。  

    Promise.race:返回首个完成(成功/失败)的结果。  

    Promise.any:返回首个成功结果,全部失败则报错。  

    Promise.allSettled:等待所有结束,返回状态与结果。  

2. 异步控制  

    控制并发:限制并行任务数(如队列+计数器)。  

    红绿灯:async/await 定时切换状态(如 3s 红灯→2s 绿灯)。  

3. 生成器与异步  

    Generator:生成迭代器,可暂停执行。  

    手写async:用 Generator + Promise 模拟异步函数。  

 五、数据结构与算法

1. 遍历与搜索  

    DFS 遍历:深度优先(递归/栈)。  

    BFS 遍历:广度优先(队列)。  

2. 排序算法  

    冒泡排序:相邻比较交换。  

    快排:分治思想,基准分割左右子数组。  

    堆排序:构建最大堆,反复取堆顶。  

    乱序排序:随机交换位置(如 FisherYates 洗牌)。  

3. 数据处理  

    数组转树:利用 Map 存储节点,按 parentId 关联子树。  

    子树添加父 ID:递归遍历树结构注入父节点信息。  

 六、实用工具

1. 数组方法  

    手写Map:遍历并返回新数组。  

    手写forEach:遍历无返回值。  

    手写filter:条件筛选返回新数组。  

    手写reduce:累积计算结果。  

2. 格式转换  

    千位数分割:1234567 → "1,234,567"。  

    大写转驼峰:HELLO_WORLD → helloWorld。  

    驼峰转大写:helloWorld → HELLO_WORLD。  

    解析 URL:拆分参数、哈希、路径等。  

 七、Web API 实现

1. 路由机制  

    手写Hash路由:监听 hashchange 事件。  

    手写History路由:基于 pushState 和 popstate 事件。  

2. 底层 API  

    手写defineProperty:实现属性劫持(Getter/Setter)。  

    setTimeout 实现 setInterval:递归调用模拟定时任务。    

http://www.xdnf.cn/news/1207459.html

相关文章:

  • PyTorch 数据类型和使用
  • Arduino与STM32:初学者该如何选择?
  • 【LeetCode 热题 100】(二)双指针
  • Mac安装Navicat步骤Navicat Premium for Mac v17.1.9【亲测】
  • 《React与Vue构建TODO应用的深层逻辑》
  • 【目标检测】小样本度量学习
  • 知不足而奋进,望远山而前行。
  • 接口自动化测试pytest框架
  • 从0到1理解大语言模型:读《大语言模型:从理论到实践(第2版)》笔记
  • 百元级工业级核心板:明远智睿×瑞萨V2H,开启AIoT开发新纪元
  • 如何查询并访问路由器的默认网关(IP地址)?
  • 如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器
  • 场景解决-列表项切换时同步到可视区域
  • jvm冷门知识十讲
  • 【lucene】currentFrame与staticFrame
  • 落霞归雁思维框架应用(十) ——在职考研 199 管综 + 英语二 30 周「顺水行舟」上岸指南
  • 26考研11408数据结构
  • 电脑没有声音了怎么恢复 快速解决音频故障
  • 艾利特机器人:光伏机器人如何重塑清洁能源制造新格局
  • HarmonyOS-ArkUI Web控件基础铺垫6--TCP协议- 流量控制算法与拥塞控制算法
  • 道路坑洞检测数据集介绍8300张图片-智能道路巡检系统 车载安全监测设备 城市基础设施管理
  • QFutureWatcher 收不到 finished 信号-QFutureWatcher 与对象生命周期
  • Mac m系列芯片安装node14版本使用nvm + Rosetta 2
  • 【Rust并发集合】如何在多线程中并发安全地使用集合
  • vue3插槽详解
  • Deep Research(信息检索增强)认识和项目实战
  • 设计模式---单例
  • 博物馆 VR 导览:图形渲染算法+智能讲解技术算法实现及优化
  • 【MySQL】从连接数据库开始:JDBC 编程入门指南
  • 如何从 Web2 转型到 Web3