多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > web前端 > jscript > JavaScript 異步方法隊列鏈

JavaScript 異步方法隊列鏈

來源:程序員人生   發(fā)布時間:2014-06-20 16:00:08 閱讀次數(shù):3390次

在javascript中,方法的鏈式調(diào)用很流行,使用jQuery的朋友對此一定深有體會。在《javascript設(shè)計模式》中對這種方法作了比較詳細的描述,實現(xiàn)方法的鏈式調(diào)用,只須讓在原型中定義的方法都返回調(diào)用這些方法的實例對象的引用即可,看看書中的這段代碼:

(function() {  function _$(els) {    this.elements = [];    for (var i = 0, len = els.length; i < len; ++i) {      var element = els[i];      if (typeof element == 'string') {        element = document.getElementById(element);      }      this.elements.push(element);}  };  _$.prototype = {    each: function(fn) {      for ( var i = 0, len = this.elements.length; i < len; ++i ) {        fn.call(this, this.elements[i]);      }      return this;    },    setStyle: function(prop, val) {      this.each(function(el) {        el.style[prop] = val;      });      return this;    },    show: function() {      var that = this;      this.each(function(el) {        that.setStyle('display', 'block');      });      return this;    },    addEvent: function(type, fn) {      var add = function(el) {        if (window.addEventListener) {          el.addEventListener(type, fn, false);        }        else if (window.attachEvent) {          el.attachEvent('on'+type, fn);        }      };      this.each(function(el) {        add(el);      });      return this;    }  };  window.$ = function() {    return new _$(arguments);  };})();

可以看到,每個方法都以”return this”結(jié)束,這就會將調(diào)用方法的對象傳遞給鏈上的下一個方法。但是,如果我們要操作的數(shù)據(jù)是通過異步請求來獲得的,如何保持方法的鏈式調(diào)用呢?Dustin Diaz為我們提供了一種方法來保證方法的鏈式調(diào)用,他也是《javascript設(shè)計模式》一書的作者之一。

他首先構(gòu)建了一個Queue對象,即:

function Queue() {  // store your callbacks  this._methods = [];  // keep a reference to your response  this._response = null;  // all queues start off unflushed  this._flushed = false;}Queue.prototype = {  // adds callbacks to your queue  add: function(fn) {    // if the queue had been flushed, return immediately    if (this._flushed) {      fn(this._response);    // otherwise push it on the queue    } else {      this._methods.push(fn);    }  },  flush: function(resp) {    // note: flush only ever happens once    if (this._flushed) {      return;    }    // store your response for subsequent calls after flush()    this._response = resp;    // mark that it's been flushed    this._flushed = true;    // shift 'em out and call 'em back    while (this._methods[0]) {      this._methods.shift()(resp);    }  }};

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲不卡免费视频 | japanese18日本护士| 亚洲精品自拍视频 | 欧美性猛交xxxx免费看手交 | 亚洲成网站| 男女免费观看在线爽爽爽视频 | 亚洲a在线播放 | 国产精品综合一区二区三区 | 欧美亚洲国产精品久久久久 | 伊人网视频在线观看 | 久久综合精品国产一区二区三区无 | 久久a级片| h毛片 | 国产精品嫩草影院99av视频 | 亚洲精品视频观看 | 我想看一级毛片 | 日本一级毛片免费 | 欧美日韩加勒比一区二区三区 | 欧美色成人tv在线播放 | 日本护士xxxjapanese | 久操美女 | 亚洲精品国产一区二区三区四区 | 亚洲第一页乱 | 一级做a爰片性色毛片中国 一级做a爰全过程免费视频毛片 | 日本香蕉一区二区在线观看 | 鲁在线| freexxxx性香港hd性 | 特一级黄色片 | 亚洲一区二区福利视频 | 亚洲免费a | 日韩欧美视频在线播放 | 国产高清一区二区 | 麻豆19禁国产青草精品 | 久久精品国产免费一区 | 日本系列 1页 亚洲系列 | 国产激情在线观看完整流畅 | 一区二区三区精品国产欧美 | 一级毛片在线观看视频 | 欧美日韩性猛交xxxxx免费看 | 波多野结衣欧美 | 黄色www.|