国产69囗曝吞精在线视频,肥臀浪妇太爽了快点再快点,亚洲欧洲成人a∨在线观看,狠狠色丁香久久综合 ,国精一二二产品无人区免费应用,亚洲精品久久久久中文字幕,四虎一区二区成人免费影院网址 ,无码三级中文字幕在线观看

      柯里化、原生bind、防抖節流函數、實現promise

      2019-7-25    seo達人

      如果您想訂閱本博客內容,每天自動發到您的郵箱中, 請點這里

      多參數柯里
      原生bind
      實現promise
      防抖節流函數
      多參數柯里化

      參數fn可以是function(a,b,c){},也可以是function(a,b,c,d,f){}

      // 支持多參數傳遞
      function progressCurrying(fn, args) {

          var _this = this
          var len = fn.length;
          var args = args || [];
          return function() {
              var _args = Array.prototype.slice.call(arguments).concat(args);
              // 如果參數個數小于最初的fn.length,則遞歸調用,繼續收集參數
              if (_args.length < len) {
                  return progressCurrying.call(_this, fn, _args);
              }

              // 參數收集完畢,則執行fn
              return fn.apply(this, _args);
          }
      }

      原生js實現bind

      Function.prototype.myBind = function(Othis){
        if(typeof this !== "function"){
          return new TypeError("not a function");
        }
        let _this = this;
        let args = [...arguments].slice(1);
        let func = function(){};
        let fBound = function () {
          return _this.apply(this instanceof func ?this:Othis,[...arguments].concat(args));
        }
        func.prototype = _this.prototype;
        fBound.prototype = new func();
        return fBound;
      }

      防抖函數

      //每wait時間內執行一次,若期間被觸發,則重新執行
      function debounce(func,wait) {
        var timeout ;
        return function(){
          let args = [...arguments];
          let _this = this;
          if(timeout){
            clearTimeout(timeout);
          }
          timeout = setTimeout(function() {
            func.apply(_this,args);
          }, wait);
        }
      }

      節流函數

      //每wait時間執行一次
      function throttle(func,wait){
        var timeStart = 0 ;
        return function(){
          let _this = this;
          let args = [...arguments];
          let now = Date().now();
          if(now - timeStart >wait){
            func.apply(_this,args);
            timeStart = now;
          }
        }
      }

      實現一個promise

          function _Promise(func){
              this.status = 'pending'
              this.result = '' ;
              func(this.resolve.bind(this),this.reject.bind(this));
          }
          _Promise.prototype.resolve = function(result){
              if(this.status == 'pending'){
                  this.status = 'fullfilled';
                  this.result = result;
              }
          }
          _Promise.prototype.reject = function(error){
              if(this.status == 'pending'){
                  this.status = 'rejected';
                  this.result = error;
              }
          }
          _Promise.prototype.then = function(preResolve,preReject){
              let _isPromise ;
              if(this.status == 'fullfilled'){
                  _isPromise = preResolve(this.result);
              }else if(this.status == 'rejected' && arguments[1]){
                   _isPromise = preReject(this.result);
              }
              return _isPromise instanceof _Promise ? _isPromise:this;
          }

      實現一個promise.all()

       function promiseAll(promiseArray){
              //首先參數一定是一個數組
              //然后此函數返回的是一個promise,如果全部成功,則返回結果的數組,只要有一個失敗,則返回失敗的結果
              return new Promise(function (resolve,reject){
                  if(!Array.isArray(promiseArray)){
                      return reject(new TypeError("not a function"));
                  }
                  let resolveNum = 0;
                  let arrNum = promiseArray.length;
                  let resolveResult = [];
                  for(let i=0; i<arrNum ;i++){
                      (function (i){
                          Promise.resolve(promiseArray[i]).then(function(result){
                              resolveNum ++;
                              resolveResult.push(result);
                              if(resolveNum == arrNum){
                                  return resolve(resolveResult);
                              }
                          },function(error){
                              return reject(error);
                          })
                      })(i);
                  }
              }) //返回的promise結束
              
          }
      藍藍設計www.izc.net.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、網站建設 平面設計服務

      日歷

      鏈接

      個人資料

      藍藍設計的小編 http://www.izc.net.cn

      存檔

      主站蜘蛛池模板: 制服丝袜在线第一页| 国产91在线观看| 极品少妇xxxx| 国产欧美精品亚洲日本一区| 福利视频午夜| 色偷偷成人综合亚洲精品| 人人揉人人捏人人添| 九色视频网| 久久精品无码一区二区三区 | 亚洲成a人片在线观看无码| 亚洲毛片无码专区亚洲a片| 中文字幕在线看高清电影| 国产亚洲精品美女久久久| 国产精品无码制服丝袜网站| 秋葵视频污| 久久1024| 亚洲欧美丝袜精品久久| 84pao国产成视频永久免费| 久久精品动漫| 国产精品国产精品偷麻豆| 波多野结衣在线观看一码| 色偷偷噜噜噜亚洲男人| 国产在线观看成人| 午夜性色福利在线视频福利| 久拍国产在线观看| 天天干人人干| 国产成人MV视频在线观看| 国产精品电影一区| 成年免费视频黄网站在线观看| 日韩欧美色图| 超碰96在线| 寂寞人妻瑜伽被教练日| 欧美人与野| 中文字av| 国产精品a无线| 又大又粗欧美成人网站| 亚洲第一黄网| 日本网站黄色| 欧洲av无码放荡人妇网站| 大战丰满无码人妻50p| 无码精品黑人一区二区三区|