手写JavaScript常用函数及操作(基础篇)

本文总结了JavaScript中的常用函数和操作,包括call、apply、bind、防抖、节流、类型判断、函数柯里化、浅拷贝与深拷贝的实现,以及instanceof和new操作符的使用。此外,还探讨了Promise的相关方法,如then、all和race,是前端开发者必备的基础知识。
摘要由CSDN通过智能技术生成

🌷这部分是对JavaScript常用的函数、操作符及内置对象的一个总结,例如instanceof、new操作符、防抖函数、call函数等等,面试常考

常用函数和操作符

🔆一些在实际项目中经常用的函数,自己用手写去实现一下,并总结一下相关的知识点

call函数🅰️

💬---在JavaScript中call()是函数对象的一个方法,用于在特定的作用域中调用函数,在指定的this值和参数列表的前提下调用某个函数或方法。

在call方法中可以改变this的指向,可以传入参数列表

Function.prototype.myCall = function(context){
    //检查调用对象是否为函数
    if(typeof this !== "function"){
        console.log("TypeError:The object is not a function")
        return;
    }
    //获取参数列表,去除第一个参数
    let args = Array.from(arguments).slice(1);
    let result = null;
    
    context = context || window;//这是上下文默认为widow对象
    context.fn = this;//将调用对象赋值为上下文的fn属性
    
    //在指定上下文中调用函数,并传入参数列表
    result = context.fn(...args);
    
    delete context.fn;//删除临时属性
    return result;//返回函数调用的结果
}

apply函数🅰️

💬---在JavaScript中,apply()函数是Function对象的一个方法,它允许你在指定的上下文(context)中调用函数,并且传入一个参数数组作为函数的参数列表.

Function.prototype.myApply = function(context){
    if(typeof this !== "function"){
        console.log("TypeError");
        return;
    }
    let result = null;
    context = context || window;
    context.fn = this;
    if(arguments[1]){
        result = context.fn(...arguments[1]);
    }else{
        result = context.fn();
    }
    delete context.fn;
    return result;
}

bind函数🅰️

💬在JavaScript中,bind()函数是Function对象的一个方法,它用于创建一个新的函数,该函数在调用时会将指定的上下文(context)绑定给函数,并且可以预先传入一部分参数。

Function.protoType.myBind = function(context){
    if(typeof this !== "function"){
        console.log("TypeError");
        return;  
    }
    var args = [...arguments].slice(1);
    var fn = this;
    return function Fn(){
        return fn.apply(
            this instanceof Fn ? this:Context,
            args.context(...arguments)
        );
    };
};

防抖函数🅰️

💬在JavaScript中,防抖函数是一种常用的性能优化技术,它可以限制一个函数在短时间内被频繁调用,以减少不必要的重复执行。

防抖函数通常有两种实现方式:立即执行和延迟执行。

  1. 立即执行:在触发事件后立即执行函数,然后在间隔时间内不再触发事件时再次执行。如果在间隔时间内再次触发事件,则重新开始计时。

  2. 延迟执行:在触发事件后等待一段时间后执行函数,如果在这段时间内再次触发事件,则重新计时。

🌷前者在调用函数后立即执行,而后者是一段时间后再执行

🌷两个函数在间隔或者等待时间被调用都会重新计时

🌷防抖函数在实际开发中常用于处理频繁触发的事件,比如输入框输入事件、窗口大小改变事件等,以减少不必要的重复计算或请求,提升页面性能和用户体验。

Function debounce(fn, wait){
    let timer = null;
    return function(){
        let context = this;
        let args = arguments;
        if(timer){
            clearTimeout(timer);
            timer = null;
        }
        timer = setTimeout(() => {
            fn.apply(context, args);
        }, wait);
    }
    
}

节流函数🅰️

💬节流函数是一种优化技术,它可以限制一个函数在一定时间间隔内只能执行一次,以减少不必要的重复执行。

🌷区别于防抖函数:两者都是优化函数的执行频率,但是防抖函数是延迟执行函数,避免频繁触发,而节流函数是控制执行频率,确保一定时间间隔内只执行一次。

Function throttle(fn, delay){
    let curTimer = Date.now();
    return context(){
        llet context &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值