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()は意味が違う。
0 件のコメント:
コメントを投稿