prototypeのnext
next : function (fun) {
debug('Deferred.prototype.next');
return this._post("ok", fun)
},
ブラウザ差異を吸収するためのモノのようなので、defaultのみをチェックする。
Deferred.next_default = function (fun) {
debug('Deferred.next_default');
var d = new Deferred();
var id = setTimeout(function () { d.call() }, 0);
d.canceller = function () { clearTimeout(id) };
if (fun) d.callback.ok = fun;
return d;
};
Deferred.next = Deferred.next_faster_way_readystatechange ||
Deferred.next_faster_way_Image ||
Deferred.next_default;
実行したテストコード
test('very simple tests for using jsdeferred with qunit.', function(){
var x = 0;
Deferred.define();
next(function(){
x = 2;
})
.next(function(){
x = 1;
})
.next(function(){
equals(x, 1);
start();
});
stop(100);
});
これも当たり前だけど、グローバルに挿入されているinstanceのものが1回呼ばれた後、prototypeのほうが2回呼ばれます。設計意図を理解せねば。それからDeferred.prototype.fnとDeferred.fnの違いもわからないとだめだなぁ。var d = Deferred; d.fn()とDeferred.fn()は意味が違う。