js,基礎易忘知識,持續更新中,,,

javacript語法易忘知識:

1.實現防抖函數debounce:
防抖函數原理 :
在事件被觸發n秒後在執行回調,如果在這n秒內又被觸發,則重新計時。

場景:
按鈕提交場景: 防止多次提交按鈕,只執行最後提交的一次
服務端驗證場景 : 表單驗證需要服務端配合,只執行一段連續的輸入事件的最後一次,還有搜索聯想詞功能和一些表單元素的校驗,如手機號,郵箱,用戶名等類似

//防抖函數
const debounce = (fn,delay)=>{
    let timer = null;
    return (...args)=>{
        clearTimeout(timer);
        timer = setTimeout(()=>{
        fn.apply(this,args)
        },delay);
    };
};
    

2.實現節流函數 (throttle):
防抖函數原理:
規定在一單位時間內。只能觸發一次函數。如果這個單位時間內觸發多次函數,只有一次生效。

適用場景:
拖拽場景: 固定時間內只執行一次,防止超高頻次觸發位置變動
縮放場景: 監控瀏覽器resize
動畫場景: 避免短時間內多次觸發動畫引起性能問題

//節流函數
const throttle = (fn,delay = 500) =>{
    let flag = true;
    return (...args) =>{
        if (!flag) return;
        flag = false;
        setTimeout(() => {
        fn.apply(this,args)
        },delay);
    };
};

實現一個call:
將函數設爲對象的屬性
執行&刪除這個函數
指定this到函數並傳人給定參數執行函數
如果不傳人蔘數,默認指向爲 window

//實現一個call方法;
Function.prototype.myCall = function(context){
    //此處沒有考慮context非object情況
    context.fn = this;
    let args = [];
    for (let i = 1,len = arguments.length,i < len; i++){
        args.push(arguments[i]);
    }
    context.fn(...args);
    let result = context.fn(...args);
    delete context.fn;
    return result;
};

3.模擬Object.create
原理:Object.create() 方法創建一個新對象,使用現有的對象來提供新創建的對象的__proto__

// 模擬 object.create
function create(proto){
    function F(){
        F.prototype = proto;
        
        return new F();
    }
}

4.轉化爲駝峯命名

var f = function(s){
    return s.replace(/-\w/g,function(x){
      return x.slice(1).toUpperCase(); 
    })
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章