防抖和节流+手写new+深拷贝

深拷贝

        function deepCopy(object) {
            if (!object || typeof object !== 'object')
                return;
            let newObject = Array.isArray(object) ? [] : {};
            //遍历对象中的key
            for (let key in object) {
                //判断对象中有该键值吗
                if (object.hasOwnProperty(key)) {
                    //如果键值是对象递归,如果不是,将这个这个键值存到数组中
                    newObject[key] =
                        typeof object[key] === "object" ? deepCopy(object[key]) : object[key];
                }
            }
            return newObject;
        }

手写new

function mynew(Func, ...args) {
  // 1.创建一个新对象
  const obj = {}
  // 2.新对象原型指向构造函数原型对象
  obj.__proto__ = Func.prototype
  // 3.将构建函数的this指向新对象
  let result = Func.apply(obj, args)
  // 4.根据返回值判断
  return result instanceof Object ? result : obj
}

防抖和节流简单写法

        // 防抖
        function debounce(fn, time) {
            //这里相当于定义了一个全局的timer
            let timer = null;
            return function () {
                //如果定时器存在,那就清掉,开启新的计时器
                if (timer) {
                    clearTimeout(timer)
                }
                timer = setTimeout(() => {
                    fn.apply(this, arguments);
                }, time);
            }
        }


        // 节流
        function throttle(fn, delay) {
            //相当于在全局定义了一个timer
            let timer = null;
            return function () {
                //如果timer存在,直接结束函数
                if (timer) {
                    return
                }
                timer = setTimeout(() => {
                    fn.apply(this, arguments);
                    //指定时间结束后,将timer变成null,否则这个函数将一直不执行
                    timer = null
                }, delay);
            }
        }

防抖:

定义:防止用户触发某个行为,只识别一次 「频繁的定义可以自己管控」

节流:

定义:用户频繁操作的时候,不根据用户的频繁操作度来绝定触发多少次,而是根据设定好的频率进行触发,实现“降频”的效果,相对于防抖来讲,节流是允许触发多次的!

防抖场景:

场景一:点击按钮,向服务器发送请求(需要一定的时间),在当前请求没有成功之前,再次点击按钮应该什么都不处理才对

 防抖代码:节流思路:

 应用场景:   onscroll  Input输入框的keydown keyup input事件 等等

代码:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值