手写系列
May 6, 2024About 1 min
面试官让我手写Promise.all - 掘金
核心: Promise.all 返回的也是一个 promise
手写防抖函数
函数防抖是指在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。
const debounce = (func,wait)=>{
let timer
return ()=>{
clearTimeout(timer)
timer = setTimeout(func,wait)
}
}手写节流函数
创造一个 CanRu 变量,根据这个变量来监听状态
const throttle = (func,wait)=>{
let canRun = true;
return function(){
if (!canRun) return;
canRun = false;
setTimeout(()=>{
fn.apply(this,arguments);
canRun = true;
},wait)
}
}手写 instanceOf
instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。
实现步骤:
- 首先获取类型的原型
- 然后获得对象的原型
- 然后一直循环判断对象的原型是否等于类型的原型,直到对象原型为
null,因为原型链最终为null
小米 考过
function myInstanceOf(obj, constructor) {
// 如果对象为null或undefined,则返回false
if (obj === null || obj === undefined) {
return false;
}
// 获取对象的原型
let proto = Object.getPrototypeOf(obj);
// 循环检查对象的原型链,直到找到与构造函数的原型相等的原型,或者到达原型链的尽头(Object.prototype)
while (proto !== null) {
if (proto === constructor.prototype) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
return false;
}手写 flat
