1. 程式人生 > >關於$.when(),$.apply(),$.when.apply(),$.when.apply().then()的用法(專案總結)

關於$.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=[];