麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > JavaScript > 正文

JavaScript 異步方法隊列鏈實現代碼分析

2024-05-06 12:37:05
字體:
來源:轉載
供稿:網友

在《javascript設計模式》中對這種方法作了比較詳細的描述,實現方法的鏈式調用,只須讓在原型中定義的方法都返回調用這些方法的實例對象的引用即可,看看書中的這段代碼:
代碼如下:
(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”結束,這就會將調用方法的對象傳遞給鏈上的下一個方法。但是,如果我們要操作的數據是通過異步請求來獲得的,如何保持方法的鏈式調用呢?Dustin Diaz為我們提供了一種方法來保證方法的鏈式調用,他也是《javascript設計模式》一書的作者之一。
他首先構建了一個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);
}
}
};

然后用它作為工具構建我們的異步方法隊列鏈。有了這個工具,就可以很方便的構建一個從服務器端獲取內容并將其附加到選擇器中的jQuery plugin。
代碼如下:
(function($) {
$.fn.fetch = function(url) {
var queue = new Queue;
this.each(function() {
var el = this;
queue.add(function(resp) {

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 精品久久久久久久久久中文字幕 | 免费播放欧美毛片 | 国产精品午夜未成人免费观看 | 9191色| 久久草在线视频免费 | 国产精品久久久久久久四虎电影 | 中文字幕综合 | 成码无人av片在线观看网站 | 涩涩操 | av免费在线观看国产 | 成人电影毛片 | 成人午夜天堂 | 1314av| 国产女做a爱免费视频 | 欧美激情视频一区二区免费 | 九色激情网 | av免费在线播放网址 | 国产免费乱淫av | 日韩视频一区在线 | 免费久久精品 | 羞羞视频入口 | 国产精品一区二区三区99 | 久久sp | 一区二区免费看 | 精品国产一区二区三区天美传媒 | 综合网日日天干夜夜久久 | 精品久久久久久国产 | 久久久久久久久国产精品 | 欧美一级成人 | 可以看毛片的网址 | 亚洲影视在线 | 久久sp| 国产在线精品91 | 国内精品国产三级国产a久久 | 狠狠操电影| 精品中文字幕在线播放 | 国产一区二区免费 | 日韩一级成人 | 国产三级在线视频观看 | 萌白酱福利视频在线网站 | 九九热在线免费观看视频 |