• <abbr id="chdyf"></abbr>
    <ruby id="chdyf"><acronym id="chdyf"><meter id="chdyf"></meter></acronym></ruby>
    <bdo id="chdyf"></bdo>
    <dfn id="chdyf"><menu id="chdyf"></menu></dfn>
    1. <menuitem id="chdyf"></menuitem><strong id="chdyf"><menu id="chdyf"></menu></strong>

      <rt id="chdyf"><menu id="chdyf"></menu></rt>
      成人小说一区二区三区,伊人精品成人久久综合全集观看,久久HEZYO色综合,中文字幕精品人妻熟女,影音先锋成人网站,我要看免费一级毛片,中国女人做爰A片,中文字幕av久久爽Av

      柯里化、原生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.wtxcl.cn )是一家專注而深入的界面設計公司,為期望卓越的國內外企業提供卓越的UI界面設計、BS界面設計 、 cs界面設計 、 ipad界面設計 、 包裝設計 、 圖標定制 、 用戶體驗 、交互設計、網站建設 平面設計服務

      日歷

      鏈接

      個人資料

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

      存檔

      主站蜘蛛池模板: 欧美日韩乱妇高清免费| 人人婷婷人人澡人人爽| 渝中区| 麻豆A∨在线| 丝袜-91Porn| 黄色影院91| 日韩无码专区| 少妇av在线| 辽阳县| 女同另类激情在线三区| 亚洲欧美另类在线一区二区三区| 国产精品久久久久亚洲| 欧美日韩久久| 国产在线你懂| www.色综合| 中文字幕三区| 欧美日韩在大午夜爽爽影院| 国产精品网曝门免费视频| 久久精品超碰AV无码| 女乱淫免费看视频大黄| 人人妻人人澡人人爽不卡视频| 一区二区三区av| 久久无码中文字幕免费影院| 亚洲日韩精品综合在线一区二区| 欧美巨大xxxx做受中文字幕| 影音先锋久久| 又爽又大又光又色的午夜视频| 日韩顶级metart裸体自慰| 久久国产乱子伦精品在| 老司机亚洲精品影院| 凤台县| 日本高清免费AAAAA大片视频| 99国产精品99久久久久久| 超碰免费在线| 九九免费热在线精品| 国产XXXX| 亚洲午夜一区二区| xxxx国产| 国产日韩AV高潮在线| 人妻狠狠操| 日本精品一区二区视频|