關於$.when(),$.apply(),$.when.apply(),$.when.apply().then()的用法(專案總結)
專案中有這樣的應用,以前基本上沒有用到過$.when(), $.apply()這些方法,所以就自己百度了一下
$.when()
jQuery.when() 方法
例項
一個引數傳遞給 $.when() 被受理,執行回撥函式
$(function(){ $.when({testing:123}).done(function(x){alert(x.testing);}/* alerts "123"*/);})嘗試一下 »
定義和用法
$.when() 函式提供一種方法來執行一個或多個物件的回撥函式。
提示:如果向 jQuery.when 傳入一個延遲物件,那麼會返回它的 Promise 物件(延遲方法的一個子集)。 可以繼續繫結 Promise 物件的其它方法,例如, defered.then 。當延遲物件已經被受理(resolved) 或被拒絕(rejected)(通常是由建立延遲物件的最初程式碼執行的),那麼就會呼叫相應的回撥函式。
語法
$.when( deferreds )引數 | 描述 |
---|---|
deferreds | Deferred型別 一個或多個延遲物件,或者普通的JavaScript物件 |
更多例項
如果你不傳遞任何引數,jQuery.when()將返回一個resolved(受理)狀態的 promise 物件。
例項
不傳遞任何引數,執行回撥函式
[mycode3 type="javascript"] $(function () { $.when().then(function( x ) { alert( "I fired immediately" ); }); }) [/mycode3]嘗試一下 »
在多個延遲物件傳遞給jQuery.when() 的情況下,該方法返回一個新的"宿主"延遲物件,當所有的延遲對 象被受理(resolve)時,該方法才會受理它的宿主延遲物件。當其中有一個延遲物件被拒絕(rejected)時, 該方法就會拒絕它的宿主延遲物件。當宿主物件被受理時,doneCallbacks(受理回撥)將被執行。
例項
傳入多個延遲物件
[mycode3 type="javascript"] $(function () { var d1 = $.Deferred(); var d2 = $.Deferred(); $.when( d1, d2 ).done(function ( v1, v2 ) { alert( v1 ); // "Fish" alert( v2 ); // "Pizza" }); d1.resolve( "Fish" ); d2.resolve( "Pizza" ); }) [/mycode3]如果沒有值傳遞給延遲物件的受理(resolved)事件,那麼相應的doneCallback引數 將是undefined。 如果傳遞給延遲物件的受理(resolved)事件為單個的值, 相應的引數 將保留那個值。 在傳遞給延遲物件的解決(resolved)事件為為多個值的情況下, 相應的 引數將是這些值組成的陣列。
例項
傳入多個不同型別的延遲物件
[mycode3 type="javascript"] $(function () { var d1 = $.Deferred(); var d2 = $.Deferred(); var d3 = $.Deferred(); $.when( d1, d2, d3 ).done(function ( v1, v2, v3 ) { alert( v1 ); // v1 is undefined alert( v2 ); // v2 is "abc" alert( v3 ); // v3 is an array [ 1, 2, 3, 4, 5 ] }); d1.resolve(); d2.resolve( "abc" ); d3.resolve( 1, 2, 3, 4, 5 ); }) [/mycode3]嘗試一下 »
在多個延遲的情況下,如果延遲物件之一被拒絕(rejected),jQuery.when()觸發立即 呼叫 "宿主" 延遲物件的 failCallbacks 回撥函式。
例項
多個延遲物件之一被拒絕時呼叫failCallbacks 回撥函式
[mycode3 type="javascript"] $(function () { $.when($.ajax("/page1.php"), $.ajax("/page2.php")).then(function(data, textStatus, jqXHR){ alert(jqXHR.status); }, function(obj){ alert(obj.statusText); }); }) [/mycode3]嘗試一下 » $.apply()
1、物件的繼承,一般的做法是複製:Object.extend
prototype.js的實現方式是:
Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destination; } |
除此之外,還有種方法,就是:Function.apply(當然使用Function.call也是可以的)
apply方法能劫持另外一個物件的方法,繼承另外一個物件的屬性
Function.apply(obj,args)方法能接收兩個引數
obj:這個物件將代替Function類裡this物件
args:這個是陣列,它將作為引數傳給Function(args-->arguments)
apply示範程式碼如下:
<script> function Person(name,age){ //定義一個類,人類 this.name=name; //名字 this.age=age; //年齡 this.sayhello=function(){alert("hello")}; } function Print(){ //顯示類的屬性 this.funcName="Print"; this.show=function(){ var msg=[]; |