我正在閱讀jQuery中的延遲對象。任何人都可以告訴我下面兩種調用方式有什麼區別?
$.when.apply(null, a method).done(function(){success callback})
$.when.(a method).done(function(){success callback})
而什麼樣的情況下是適用於上述第一種方式?
在此先感謝。
我正在閱讀jQuery中的延遲對象。任何人都可以告訴我下面兩種調用方式有什麼區別?
$.when.apply(null, a method).done(function(){success callback})
$.when.(a method).done(function(){success callback})
而什麼樣的情況下是適用於上述第一種方式?
在此先感謝。
$.when.apply(null, a method)
纔有意義,如果的方法實際上是一個陣列或方法呼叫返回一個數組。然後它就像一個$.when(elements, of, the, array)
。 See MDN有關apply
方法的詳細說明。我想你的意思是$.when(a method)
。在這種情況下,方法應該再次是方法調用返回延遲對象或指向延遲對象的變量。
的$.when()
語法$.when(one, or, more, deferreds)
- 所以,如果你想傳遞多個deferreds這是一個數組,你需要.apply()
因爲你不希望建立方法調用作爲一個字符串,並使用eval
(這的確是在這種情況下,邪惡)。
Deferred是爲了在某個遠程調用(即:ajax)的響應之後執行代碼而創建的。
所以你可以有:
load_conf = function (user_id) {
var def = $.Deferred()
$("http://get_conf_data_url?user_id="+user_id).done(function (data) {
var processed_conf = do_something_with(data);
def.resolve(processed_conf);
})
return def.promise();
}
,所以你可以去:
load_conf(1).done(function (processed_data) {
do_something_with(processed_data);
});
什麼來加載exacly 3個配置後執行一些代碼? 你可以這樣做:
$.when(load_conf(1), load_conf(2), load_conf(3)).done(function (c1, c2 ,c3) {
console.log("configurations: ", c1, c2, c3);
})
但對於加載ň配置,其中N是可變後執行一些代碼? 對於這種情況,您可以使用Function.prptotype.apply方法。 您可以將第一個參數作爲參數傳遞給函數內部的「this」。 第二個參數是參數列表,但在數組內。
所以你可以去這樣的:
var defs = [];
for (var i=1; i<=N; i++) {
defs.push(load_conf(i));
}
// here's the magic
$.when($,defs).done(function() {
console.log("All conf loaded: ", arguments);
// arguments contains N processed answers
});
參見[MDN:'fun.apply()'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/應用)&[Eloquent JavaScript](http://eloquentjavascript.net/chapter6.html#key5) – gnarf 2012-04-27 05:39:07
+1 for $ .when.apply(null,一種方法) – marverix 2013-10-17 07:34:27