2016-01-14 45 views
0

以下是我有:將對象屬性作爲函數參數傳遞的好策略/模式是什麼?

var url = config_ajax.url; 
xhr.addEventListener("progress", function(evt, url){ 
    if (evt.lengthComputable) { 
    var percent = (evt.loaded/evt.total) * 100; 
    console.log(url); 
    Pub.ajaxIndicator(percent); 
    } 
}, false); 

我認爲它看起來不錯,但JS不喜歡傳config_ajax.url的功能和錯誤。

+2

你不在這裏傳遞任何東西,你只定義參數名稱 – CoderPi

+0

該函數是一個回調函數。當事件通過事件傳遞的任何參數發生時它會被調用。你的'url'變量不會被傳遞給它。 – Lucas

+0

如何將config_ajax.url傳遞給我的事件處理函數? –

回答

2

實際上它創建了一個閉包並且可以訪問,但是我明確地通過它,但它是一個回調,所以我認爲不可能。

你說得對。回調是一個閉包,你不能明確地傳遞給它。 正在調用該函數時,只能將值傳遞給函數。但是你不叫這個回調,它叫做你爲。您無法控制傳遞給它的網址。

我想你可以使用.bind()第一個參數設置爲特定值,如果你覺得更清潔:

function showProgress(url, evt) { 
    if (evt.lengthComputable) { 
    var percent = (evt.loaded/evt.total) * 100; 
    console.log(url); 
    Pub.ajaxIndicator(percent); 
    } 
} 

xhr.addEventListener("progress", showProgress.bind(null, config_ajax.url), false); 

我建議獲得舒適與關閉,有一個共同的和非常強大的工具在JavaScript中。例如。沒有理由創建url,您也可以在回調中直接訪問config_ajax

+0

很好,當然它更清潔! –

相關問題