前端常见手写代码题集

1. 手写Object.create

思路:将传入的对象作为原型

function create(obj) {function F() { }F.prototype = objreturn new F()
}

2. 手写 instanceof

思路:不断地从左边的原型链上去找

function MyInstanceof(left, right) {let l = Object.getPrototypeOf(left);let r = right.prototype;while (1) {if (!l) return false;if (l === r) return true;l = Object.getPrototypeOf(l)}
}

3. 手写 new 操作符

思路:

  • 创建一个空对象
  • 设置原型对象
  • this指向这个对象
function myNew(fn) {let obj = {};obj.__proto__ = fn.prototype;let res = fn.call(obj);return typeof res === 'object' ? res : obj
}

4. 手写 Promise.all

直接写

function MyPromiseAll(promises) {return new Promise((resolve, reject) => {let count = 0;let res = [];promises.forEach((promise, index) => {Promise.resolve(promise).then((value) => {count++;res[index] = value;if (count === promises.length) {return resolve(res)}}).catch((err) => reject(err))})})
}

5. 手写 Promise.race

思路:返回第一个有结果的promise

function MyPromiseRace(promises) {return new Promise((resolve, reject) => {for (let i = 0; i < promises.length; i++) {promises[i].then(resolve, reject)}})
}

6. 手写 Promise.allsettled

function allsettled(promises) {return new Promise((resolve, reject) => {const res = [];let count = 0;for (let i = 0; i < promises.length; i++) {promises[i].then((value) => res[i] = { status: 'fulfilled', value }).reject((reason) => res[i] = { status: 'rejected', reason }).finally(() => {count++;if (count === promises.length) {resolve(res)}})}})
}

7. 手写防抖、节流

// 防抖
function debounce(fn, wait) {let timer = null;return function (...args) {const context = this;if (timer) {clearTimeout(timer);timer = null;}timer = setTimeout(() => {fn.apply(context, args);}, wait)}
}// 节流
function throttle(fn, wait) {let timer = null;return function (...args) {const context = this;if (timer) {return}timer = setTimeout(() => {fn.apply(context, args);timer = null;}, wait)}
}

附加节流和防抖的应用场景:

  • 节流:
    1. 监听滚动事件
    2. 调整窗口大小页面跟着变
    3. 输入框实时搜索
  • 防抖:
    1. 用户输入的触发事件
    2. 表单提交
    3. 延迟加载

8. 手写call、apply、bind

Function.prototype.myCall = function (context, ...args) {context = context || windowargs = args || []const key = new Symbol()context[key] = thisconst res = context[key](...args)delete context[key]return res
}Function.prototype.myApply = function (context, args) {context = context || windowargs = args || []const key = new Symbol()context[key] = thisconst res = context[key](...args)delete context[key]return res
}Function.prototype.myBind = function (context, ...args) {let self = thisargs = args || []return function (...newargs) {const key = Symbol()context[key] = selfconst res = context[key](...args, ...newargs)delete context[key]return res}
}

9. 手写AJAX请求

const url = '/server';
let xhr = new XMLHttpRequest();xhr.open('GET', url, true);
xhr.onreadystatechange = function () {if (this.readyState !== 4) return;if (this.status === 200) {console.log(this.response);} else {console.log(this.statusText);}
}xhr.onerror = function () {console.log(this.statusText);
}xhr.responseType = 'json';
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(null);

10. 手写深、浅拷贝

10.1 浅拷贝

  1. Object.assign()
  2. 扩展运算符

10.2 深拷贝

  1. JSON.stringify()
  2. lodash库
  3. 手写深拷贝
    function deepClone(obj, map = new WeakMap()) {if (obj === null || typeof obj !== 'object' || map.has(obj)) {return obj;}map.set(obj, true)let newObj = Array.isArray(obj) ? [] : {};for (let key in obj) {if (obj.hasOwnProperty(key)) {newObj[key] = deepClone(obj[key]);}}return newObj;
    }

11. 一行实现sleep函数

function sleep(delay) {return new Promise(resolve => setTimeout(resolve, delay))
}

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

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

相关文章

无线网优AP、SW发现控制器

目录 无线网优解决的问题 1、信号覆盖不足的原因 2、信道繁忙 3、非802.11干扰 4、协商速率低 5、漫游效果差 6、有线带宽阻塞 无线网优方法 交换机发现与激活 一&#xff0c;交换机发现控制器方式 1、二层广播 2、DHCP option43方式 3、DNS域名解析方式 4、trou…

Springboot之整合Swagger3

依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>配置 application.yaml spring:# mvc这部分解决swagger3在新版本Springboot中无…

C++模板基础及代码实战

C模板基础及代码实战 C 模板概览 泛型编程的支持 C 不仅为面向对象编程提供了语言支持&#xff0c;还支持泛型编程。正如第6章《设计可重用性》中讨论的&#xff0c;泛型编程的目标是编写可重用的代码。C 中支持泛型编程的基本工具是模板。虽然模板不严格是面向对象的特性&a…

C/C++---------------LeetCode第350. 两个数组的交集 II

两个数组的交集|| 题目及要求双指针哈希表在main内使用 题目及要求 给你两个整数数组 nums1 和 nums2 &#xff0c;请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数&#xff0c;应与元素在两个数组中都出现的次数一致&#xff08;如果出现次数不一致&#xff0…

基于springboot + vue大学生竞赛管理系统

qq&#xff08;2829419543&#xff09;获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;springboot 前端&#xff1a;采用vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xf…

基于单片机的智能健康监测手环的设计

目 录 1 绪论... 2 1.1 引言... 2 1.2 智能手环的国内外研究现状... 2 1.3 课题的研究意义... 3 1.4 本文的研究内容和章节安排... 4 2 智能手环系统设计方案... 5 2.1 系统总体设计方案... 5 2.2 主芯片选择... 5 2.3 显示方案的选择... 6 2.4 倾角传感器的选择... 6 2.5 心率…

【AIGC】AI作图最全提示词prompt集合(收藏级)

目录 一、正向和负向提示词 二、作图参数 你好&#xff0c;我是giszz. AI做图真是太爽了&#xff0c;解放生产力&#xff0c;发展生产力。 但是&#xff0c;你是不是也总疑惑&#xff0c;为什么别人的图&#xff0c;表现力那么丰富呢&#xff0c;而且指哪打哪&#xff0c;要…

DFT(离散傅里叶变换)的通俗理解

本文包含了博主对离散傅里叶变换&#xff0c;负频率&#xff0c;实信号与复信号频谱的理解&#xff0c;如有不妥&#xff0c;欢迎各位批评指正与讨论。 文章目录 DFT的理解信号的频谱实信号的频谱复信号的频谱 DFT的理解 傅里叶变换是一种将信号从时域转换到频域的数学工具。…

SQL Server事务(Transaction)

5. 事务(Transaction) 5.1. 事务概念 事务是关系库中不可分割的一系列数据库操作,这些操作必须要么整体成功,要么整体失败。事务维护数据完整性,保证数据库总是处于一致性状态。虽然,各关系库中事务实现和操作的具体细节有所不同,但基本概念和功能完全相同,而具体操作…

通信标准化协会,信通院及量子信息网络产业联盟调研玻色量子,共绘实用化量子未来!

8月14日&#xff0c;中国通信标准化协会&#xff0c;信通院标准所及量子信息网络产业联盟等单位领导走访调研北京玻色量子科技有限公司&#xff08;以下简称“玻色量子”&#xff09;&#xff0c;参观了玻色量子公司及自建的十万颗粒洁净度的光量子信息技术实验室&#x1f517;…

【win32_003】不同字符集下的通用字符串语法TCHAR、TEXT、PTSTR、PCTSTR

TCHAR 通用 根据项目属性是否使用Unicode字符集&#xff0c;TCHAR被解释为CHAR(char)或WCHAR(wchar_t)数据类型。 TCHAR a ‘A’ ; TCHAR arr [] TEXT(“AA”); TCHAR arr [100] TEXT(“AA”); TCHAR *pstr TEXT(“AA”); TEXT宏 #ifdef UNICODE #define __TEXT(quote) L#…

STM32下载程序的五种方法

刚开始学习 STM32 的时候&#xff0c;很多小伙伴满怀热情买好了各种设备&#xff0c;但很快就遇到了第一个拦路虎——如何将写好的代码烧进去这个黑乎乎的芯片&#xff5e; STM32 的烧录方式多样且灵活&#xff0c;可以根据实际需求选择适合的方式来将程序烧录到芯片中。本文将…

10年前,我就用 SQL注入方式发现了学校网站的漏洞

大家好&#xff0c;我是风筝。 事情是这样子的&#xff0c;在10年以前&#xff0c;某个月黑风高夜的夜里&#xff0c;虽然这么说有点暴露年龄了&#xff0c;但无所谓&#xff0c;毕竟我也才18而已。我打开电脑&#xff0c;在浏览器中输入我们高中学校的网址&#xff0c;页面很…

TCP首部格式_基本知识

TCP首部格式 表格索引: 源端口目的端口 序号 确认号 数据偏移保留 ACK等 窗口检验和紧急指针 TCP报文段首部格式图 源端口与目的端口: 各占16位 序号:占32比特&#xff0c;取值范围0~232-1。当序号增加到最后一个时&#xff0c;下一个序号又回到0。用来指出本TCP报文段数据载…

【win32_004】字符串处理函数

StringCbPrintf 函数 (strsafe.h)&#xff1a;格式化字符串 STRSAFEAPI StringCbPrintf([out] STRSAFE_LPSTR pszDest,//目的缓冲区 LPSTR指针或者数组[in] size_t cbDest,//目的缓冲区大小[in] STRSAFE_LPCSTR pszFormat,//格式 例如&#xff1a; TEXT("%d&…

ctfhub技能树_web_信息泄露

目录 二、信息泄露 2.1、目录遍历 2.2、Phpinfo 2.3、备份文件下载 2.3.1、网站源码 2.3.2、bak文件 2.3.3、vim缓存 2.3.4、.DS_Store 2.4、Git泄露 2.4.1、log 2.4.2、stash 2.4.3、index 2.5、SVN泄露 2.6、HG泄露 二、信息泄露 2.1、目录遍历 注&#xff1…

【ArcGIS Pro微课1000例】0050:如何清除坐标系信息

文章目录 一、目的二、方法1. 使用【定义投影】工具2. 清除数据的投影信息3. 删除坐标文件 一、目的 地理信息数据的坐标系是将地理信息数据进行融合、叠加、分析的重要数学框架&#xff0c;而其描述信息是非常重要的元数据&#xff0c;涉及整个国家的测绘坐标系统&#xff0c…

【CSP】202309-1_坐标变换(其一)Python实现

文章目录 [toc]试题编号试题名称时间限制内存限制问题描述输入格式输出格式样例输入样例输出样例说明评测用例规模与约定Python实现 试题编号 202309-1 试题名称 坐标变换&#xff08;其一&#xff09; 时间限制 1.0s 内存限制 512.0MB 问题描述 对于平面直角坐标系上的坐标 (…

DSSS技术和OFDM技术

本内容为学习笔记&#xff0c;内容不一定正确&#xff0c;请多处参考进行理解 https://zhuanlan.zhihu.com/p/636853588 https://baike.baidu.com/item/OFDM/5790826?frge_ala https://zhuanlan.zhihu.com/p/515701960?utm_id0 一、 DSSS技术 信号替代&#xff1a;DSSS技术为…

python中列表的方法

文章目录 列表的方法sort()append() 列表的方法 列表&#xff08;List&#xff09;是Python中的一种数据结构&#xff0c; 提供了一些可以操作列表的方法。以下是一些常见的列表方法&#xff1a; append()&#xff1a;向列表末尾添加一个元素。 my_list [1, 2, 3] my_list.…