js 常見方法

繼承

es6:

class People {
                constructor(name) {
                    this.name = name;
                }
            }
class Man extends People{
                constructor(name) {
                    super(name)
                }
            }
let man = new Man('admin')

寄生組合繼承:

            function People(name) {
                this.name = name
            }
            function Man(name){
                People.call(this,name)
            }
            (function(){
                let Super = {}
                Super.prototype = People.prototype;
                Man.prototype = new Super()
            })()
            Man.prototype.constructor = Man;

new

? 創(chuàng)建一個空對象,將它的引用賦給 this,繼承函數(shù)的原型。
? 通過 this 將屬性和方法添加至這個對象
? 最后返回 this 指向的新對象,也就是實(shí)例(如果沒有手動返回其他的對象)

            function People(name) {
                this.name = name
            }
            People.prototype.say = function() {
                console.log(this.name);
            }
            function _new(constructor, ...args) {
                let temp = Object.create(constructor.prototype);
                let instance = constructor.apply(temp, args);
                return Object.prototype.toString.call(instance) === '[object object]' ? instance : temp;
            }

深拷貝

通過JSON對象實(shí)現(xiàn)深拷貝 :

let deepData = JSON.parse(JSON.stringify(data))

通過Object.assign()拷貝(淺拷貝)

let deepData = Object.assign({},data)

遞歸實(shí)現(xiàn)

function deepClone(obj){
  let objClone =  Array.isArray(obj) ? [] : {};
  if (obj && typeof obj === 'object') {
    for(let key in obj){
      if (obj[key] && typeof obj[key] === 'object'){
        objClone[key] = deepClone(obj[key]);
      }else{
        objClone[key] = obj[key]
      }
    }
  }
  return objClone;
}

數(shù)組去重

ES6set去重

function uniq(arr){
  var a=new Set(arr);
  var b=[...a];
    return b
}
function uniq(arr){
    var temp = []; //一個新的臨時數(shù)組
    for(var i = 0; i < array.length; i++){
        if(temp.indexOf(arr[i]) == -1){   //建議用includes(ES6)
            temp.push(arr[i]);
        }
    }
    return temp;
}

防抖

防抖在指定時間間隔里再次調(diào)用函數(shù),會清除定時器,重新計(jì)時,直到在最新的計(jì)時時間間隔里沒有調(diào)用函數(shù),才會執(zhí)行定時器里的函數(shù)

function debounce(fn,delay){
    var timer
    return function(...args){
        if(timer){
            clearTimeout(timer)
        }
        timer = setTimeout(()=>{
            fn.apply(this,args)
        }, delay)
    }
}

節(jié)流

指定時間間隔后會執(zhí)行一次函數(shù),不會清除定時器而重新計(jì)時

function throttle(fn,delay){
    let timer
    let flag = true
    return function(...args){
        if(!flag){
            return
        }
        flag = false
        timer = setTimeout(()=>{
            fn.apply(this,args)
            flag = true
        },delay)
    }
}

sleep

const sleep = time => {
 return new Promise(resolve => setTimeout(resolve,time)
 ) } 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 內(nèi)置類型 JS 中分為七種內(nèi)置類型,七種內(nèi)置類型又分為兩大類型:基本類型和對象(Object)。 基本類型有六種:...
    C楚輝H閱讀 1,798評論 0 2
  • 1、深淺拷貝 (1) 定義 淺拷貝: 將原對象或原數(shù)組的引用直接賦給新對象,新數(shù)組,新對象/數(shù)組只是原對象的一個引...
    北冥有魚_425c閱讀 1,626評論 1 22
  • 1. JS創(chuàng)建變量的5種方式?varletconstfunctionexport/import 2. var,le...
    Angel_6c4e閱讀 928評論 0 13
  • 內(nèi)置類型 JS中分為七種內(nèi)置類型,其中內(nèi)置類型又分為兩大類型: 基本類型 對象(Object) 基本類型有六種: ...
    小白摘葡萄閱讀 748評論 0 2
  • 1、離職多久了 2、大約多久到崗 3、離這里多遠(yuǎn) 4、會考慮搬家嗎 5、公司會加班 6、為什么要離職 7、你們這個...
    臨淵鯨落閱讀 1,391評論 0 1

友情鏈接更多精彩內(nèi)容