首页 > 编程语言 >【JavaScript】各种手写题汇总复习

【JavaScript】各种手写题汇总复习

时间:2022-08-22 11:22:07浏览次数:65  
标签:instanceof cache return 复习 res JavaScript timer let 手写

防抖

function throttle(fun, time) {
  let timer = null
  return () => {
    if (timer) {
      return
    }
    fun()
    timer = setTimeout(() => {
      timer = null
    }, time)
  }
}

节流

function debounce(fun, time) {
  let timer = null
  return () => {
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      fun()
    }, time)
  }
}

深拷贝

function deepClone(a, cache) {
  let res = undefined

  if (!cache) {
    cache = new Map()
  }

  if (a instanceof Object) {
    if (cache.get(a)) {
      return cache.get(a)
    }

    if (a instanceof Function) {
      if (a.prototype) {
        res = (...args) => {
          return a.call(this, ...args)
        }
      } else {
        res = (...args) => {
          return a.call(undefined, ...args)
        }
      }
    } else if (a instanceof Array) {
      res = []
    } else if (a instanceof Date) {
      res = new Date(a - 0)
    } else if (a instanceof RegExp) {
      res = new RegExp(a)
    } else {
      res = {}
    }

    cache.set(a, res)

    for (let k in a) {
      if (a.hasOwonProperty(k)) {
        res[k] = deepClone(a[k])
      }
    }

    return res
  } else {
    res = a
  }
}

手写 instanceof

function _instanceof(a, b) {
  if (typeof a !== 'object' || a === null) {
    return false
  }

  let proto = Object.getPrototypeOf(a)
  while (true) {
    if (proto === null) {
      return false
    }
    if (proto === b.prototype) {
      return true
    }
    proto = Object.getPrototypeOf(proto)
  }
}

手写 new

function _new(fn, ...args) {
  let o = Object.create(fn.prototype)
  let res = fn.apply(o, args)
  return typeof res === 'object' ? res : o
}

数组去重

// 1. set
function distDoWeight(arr) {
  return Array.from(new Set(arr))
}

标签:instanceof,cache,return,复习,res,JavaScript,timer,let,手写
From: https://www.cnblogs.com/cqkjxxxx/p/16612208.html

相关文章

  • 使用Pytorch手写ViT — VisionTransformer
    《TheAttentionisallyouneed》的论文彻底改变了自然语言处理的世界,基于Transformer的架构成为自然语言处理任务的的标准。尽管基于卷积的架构在图像分类任务中仍然是......
  • js拆分选择题各选项【javascript将选择题选项通过正则表达式拆分出来】
    最近做题库项目需要添加试题,尤其是选择题逐个添加各选项很繁琐。通过以下正则表达式可以将选择题题目、选项迅速分离出来,并自动添加到选项文本框$("#split").clic......
  • 序言 - JavaScript指南
    序  言 对于JavaScript,一直想写点什么。成为软件工程师是很早的事情了,接触JavaScript也算比较早吧,在大学时,与不少程序员一样,在电脑前通宵达旦几天也不觉得疲倦。......
  • JavaScript实现数字前补“0”的五种方法示例
    来自:https://www.jb51.net/article/153945.htm侵删<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-trans......
  • JavaScript快速入门-04-运算符
    4运算符4.1算术运算符4.1.1概述  JavaScript提供的算术运算符如下所示:类型符号示例加法运算符+a+b减法运算符-a-b乘法运算符*a*b除......
  • 封面 - JavaScript指南
     IT软件开发之JavaScript   AGuidetoJavaScriptJavaScript指南-------------------------------------------------------------------------------争取做......
  • 基础复习——运行时动态申请权限——重点
       App涉及到硬件设备的操作,比如拍照、录音、定位、SD卡等等,都要在AndroidManifest.xml中声明相关的权限。 可是Android系统为了防止某些App滥用权限,又允许用户......
  • JavaScript(上)
    说说你对作用域链的理解作用域链的作用是保证执行环境里有权访问的变量和函数是有序的,作用域链的变量只能向上访问,变量访问到window对象即被终止,作用域链向下访问变......
  • JavaScript使用reduce动态修改对象的属性名
      首先在添加到数组的时候,弄2个,把number冒号右边的是可以动态修改的,后面再使用reduce合并;    countryChildrenDouble的数据     合并之后twoO......
  • JavaScript中的运动(2)
    运动swiper插件(内置css和js)概述:swiper是一个开源的免费的一个滚动的组件(他可以运用于轮播图焦点图滑动效果等)内置的Demo(演示)他里面包含对应的css(以class的形式......