前端手写代码整理

本文整理了前端JavaScript中的重要手写代码实践,包括Object.create、instanceof、new操作符、Promise、防抖和节流函数、类型判断、call、apply、bind、函数柯里化、AJAX请求、Promise封装、浅拷贝、深拷贝以及sleep函数的实现,旨在深入理解并掌握前端核心技术。
摘要由CSDN通过智能技术生成

一、JS基础

1. 手写 Object.create

将传入的对象作为原型

function create(obj){
   
    function F(){
   }
    F,prototype=obj;
    return new F();
}
2. 手写 instanceof方法

instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。

function myInstanceof(left,right){
   
    let proto=Object.getPrototypeOf(left);//获取对象的原型
    let prototype=right.prototype;//获取构造函数的原型
    while(true){
   
        if(!proto) return false;
        if(proto===prototype) return true;
        proto=Object.getPrototypeOf(proto);
    }
}
3. 手写 new 操作符

(1)首先创建了一个新的空对象
(2)设置原型,将对象的原型设置为函数的 prototype 对象。
(3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)
(4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。

function myNew(Fn,...args){
   
    let obj={
   };
    obj._proto_=Fn.prototype;
    let res=Fn.call(obj,...args);
    if(res&& (typeof res==='object'||typeof res==='function')){
   
        return res;
    }else
        return obj;
}

优化:

function myNew(){
   
    let obj=null;
    let constructor=Array.prototype.shift.call(arguments);
    let res=null;
    
    // 新建一个空对象,对象的原型为构造函数的 prototype 对象
    obj=Object.create(constructor.prototype);
    // 将 this 指向新建对象,并执行函数(为新对象添加属性)
    res=constructor.apply(obj,arguments);
    
    let flag=res&&(typeof res==='object'||typeof res==='function');
    return flag?res:obj;
}
myNew(构造函数, 初始化参数)
4. 手写 Promise
5. 手写防抖函数

(n秒后再执行回调)[ setTimeout(fn,delay) ]

函数防抖是指在事件被触发 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时。
这可以使用在一些点击请求的事件上,避免因为用户的多次点击向后端发送多次请求。

利用setTimeout给需要防抖的方法一个延时执行

let timer=null;
function debounce(fn, delay)(
    clearTimeout(timer);
    timer=setTimeout(fn,dalay);
)

优化:

function debounce(fn,delay){
   
    let timer=null; // 利用闭包,避免污染
    return function(){
   
        let context=this;// 获取上下文
        let args=arguments; // 获取当前参数
        if(timer){
    // 如果此时存在定时器的话,则取消之前的定时器重新记时
            clearTimeout(timer);
        }
        // 设置定时器,使事件间隔指定事件后执行
        timer<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值