zoukankan      html  css  js  c++  java
  • 浅克隆,深克隆,防抖,节流

     function clone(data) {
        if (Object.prototype.toString.call(data) === '[object Array]') {
          return [...data]
        } else if (Object.prototype.toString.call(data) === '[object Object]') {
          return { ...data }
        }
        return data
      }

      function deelClone(data) {
        let ws = new WeakSet()
        function clone(data) {
          if (Object.prototype.toString.call(data) === '[object Array]') {
            if (ws.has(data)) return data
            ws.add(data)
            return data.map(item => clone(item))
          } else if (Object.prototype.toString.call(data) === '[object Object]') {
            if (ws.has(data)) return data
            ws.add(data)
            let obj = {}
            for (var i of Object.keys(data)) {
              obj[i] = clone(data[i])
            }
            return obj
          }
          return data
        }
        return clone(data)
      }

      function myInstanceof(obj, proto) {
        let parentProto = Object.getPrototypeOf(obj)
        while (parentProto) {
          if (parentProto === proto.prototype) return true
          parentProto = Object.getPrototypeOf(parentProto)
        }
        return false;
      }

      function debounce(fn, wait, longTime) {
        let time = null, timer = null
        return function () {
          let nowTime = Date.now(), that = this, args = arguments;
          if (!time) time = nowTime
          let runTime = time + longTime - nowTime
          runTime = Math.min(runTime, wait)
          clearTimeout(timer)
          timer = setTimeout(() => {
            timer = time = null
            fn.apply(that, arguments)
          }, runTime)
        }
      }

      function throttle(fn, wait) {
        let timer = null
        return function () {
          if (timer) return
          let that = this, args = arguments;
          timer = setTimeout(() => {
            timer = null
            fn.apply(that, arguments)
          }, runTime)
        }
      }
     
  • 相关阅读:
    [数据备档]源码用的百家姓的数组,实用
    Linq to Sql 与NHibernate数据库操作性能比较研究 测试程序源码
    【技术备档】在WinCE5.0下实现透明背景按钮(.net C#)
    【技术备档】windows平台下快速配置MySQLPython的方法
    反思一下,我为什么需要这些技术?
    一些软件或组件
    Hibernate 与 Spring 多数据源的配置
    asp.net web路径总结
    Ubuntu 中文编码设置
    根据枚举动态扩充datatable列
  • 原文地址:https://www.cnblogs.com/gudun/p/14709231.html
Copyright © 2011-2022 走看看