then:?function(?/*?fnDone,?fnFail,?fnProgress?*/?)?{
????????????????????var?fns?=?arguments;
????????????????????return?jQuery.Deferred(function(?newDefer?)?{????
//--------------?newDefer?也為什么直接就有了resolve,done方法呢???????????????
????????????????????
????????????????????????jQuery.each(?tuples,?function(?i,?tuple?)?{
????????????????????????????var?action?=?tuple[?0?],
????????????????????????????????fn?=?jQuery.isFunction(?fns[?i?]?)?&&?fns[?i?];
????????????????????????????//?deferred[?done?|?fail?|?progress?]?for?forwarding?actions?to?newDefer
????????????????????????????deferred[?tuple[1]?](function()?{
????????????????????????????????var?returned?=?fn?&&?fn.apply(?this,?arguments?);
????????????????????????????????if?(?returned?&&?jQuery.isFunction(?returned.promise?)?)?{
????????????????????????????????????returned.promise()
????????????????????????????????????????.done(?newDefer.resolve?)
????????????????????????????????????????.fail(?newDefer.reject?)
????????????????????????????????????????.progress(?newDefer.notify?);
????????????????????????????????}?else?{
????????????????????????????????????newDefer[?action?+?"With"?](?this?===?promise???newDefer.promise()?:?this,?fn???[?returned?]?:?arguments?);
????????????????????????????????}
????????????????????????????});
????????????????????????});
????????????????????????fns?=?null;
????????????????????}).promise();
????????????????}
2016-10-12
懂了,汗,自己突然就想通了,原因在于這行代碼:
call里面第二個deferred對象作為參數(shù)穿進去了,正好對應
這個newDefer, 這樣就對啦,哈哈