2015-06-11 76 views
0

我想用一種新的方法來擴展$.Deferred,它應該有一個類似於Deferred.fail()的簽名。這樣做的最好方法是什麼?

+0

因爲遞延是一個對象而不是一個小部件,你可以用它來擴展它,Deffered.prototype.newFunc = function(){} –

+0

http://codereview.stackexchange.com/questions/15743/custom-function-extending-jquery-deferred –

+0

@Dan Kuida你的建議似乎並沒有工作:http://jsfiddle.net/alexarg/9c1f5rmj/ –

回答

2

找到了一個方法來做到這一點。

我重寫$ .Deferred與調用的基礎功能,延長它的新方法返回對象的新功能:

$._Deferred = $.Deferred; 
$.Deferred = function (param) { 
    var deferredToExtend = $._Deferred(param); 

    deferredToExtend.test = function (param) { 
     var deferred = $.Deferred(); 
     deferredToExtend.always(deferred.resolve.bind(deferred, param)); 
     return deferred.promise(); 
    }; 

    return deferredToExtend; 
}; 

這裏是jsfiddle

+0

如果鏈接到'.then','.test'似乎返回'undefined'?見http://jsfiddle.net/9c1f5rmj/10/;另請參閱http://stackoverflow.com/questions/30719454/is-it-possible-to-add-methods-to-jquerys-promise-object,http://stackoverflow.com/questions/30746979/delay-for- jQuery的承諾 – guest271314