2013-10-02 24 views
1

爲什麼第一種情況不起作用?它只是以單例格式引用完全相同的功能。用於XHR上傳功能的單例參考不起作用

案例1 ..

var n = { 
    doThis: function(e){ 
     console.log('hello world'); 
    } 
}; 

xhr.upload.onprogress = n.doThis(e); 

案例2 ..

xhr.upload.onprogress = function(e){ 
     console.log('hello world'); 
    } 

回答

1

在第一種情況下,您要調用doThis函數,您必須將其分配給進度屬性,例如,

xhr.upload.onprogress = n.doThis; 
0

它應該是:

xhr.upload.onprogress = n.doThis 

你在做什麼在呼喚n.doThis(e)和存儲結果到xhr.upload.onprogress

+0

謝謝,我以爲我必須傳遞事件(e) –

0

在第一種情況下,你調用函數的返回值分配給onprogress財產。

你要分配的功能本身:

xhr.upload.onprogress = n.doThis; 
0

在這兩種情況下,你要創建一個函數對象,並將其分配給一個變量onprogress。對於案例1,您正在創建一個命名函數(請記住,名稱在這裏不重要,只是對創建的函數對象的引用),對於第二種情況,除這裏外,它仍是一個命名函數,函數名稱是對象xhr.upload。

現在回到爲什麼情況1不起作用。正如其他人所說的,當你做xhr.upload.onprogress = n.doThis(e);時,你正在調用函數,onprogress現在指向函數調用的結果。但是,省略調用,刪除(e)實質上會導致對先前創建的函數對象的引用。

希望有所幫助。