2012-09-09 67 views
0

我想知道是否有可能向庫中的用戶顯示一個函數需要回調,比如說5個參數,其中3個是數組(例如)。換句話說,如何通知程序員不要搞亂回調參數? 下面是一個代碼示例:如何讓程序員在javascript中實現正確的回調?

function doSomething(someArray, callback) { 
    var i = 0; 
    for (i = 0; i < someArray.length; i += 1) { 
     callback(someArray[i]); 
    } 
} 

如何程序員會發現參數應在其回調函數接受什麼樣的?

+0

你的意思是像intellisense? (來自維基百科頁面 - 「智能感知是一種訪問功能描述的便捷方式,特別是它們的參數列表」) – Dan

+0

不可能在javascript中聲明參數類型,甚至不能聲明參數計數是可能的,所以它可以達到程序員可以進行大量的類型檢查,或者僅僅記錄它。 – philipp

+1

這是文檔的用途。 – SLaks

回答

3

Javascript沒有對參數進行類型檢查,您無法對回調進行運行時檢查以查看它期望的參數。在運行時你可以做的一件事是你可以檢查callback.length來查看它宣稱它有多少個參數作爲形式參數。函數不需要定義它的形式參數,因爲它也可以使用參數對象來獲取參數,但是如果您想強制它們以某種方式編程,可以通過這種方式進行檢查。有關更多信息,請參閱this doc

你最好的選擇是很好的文檔,以使其完全清楚(通常還有示例代碼)應該如何編寫回調。

如果你想稍微強化你的庫,你可以捕獲在回調中拋出的任何異常並處理它們,但是合適。

function doSomething(someArray, callback) { 
    var i = 0; 
    for (i = 0; i < someArray.length; i += 1) { 
     try { 
      callback(someArray[i]); 
     } catch(e) { 
      // handle any exception in the callback 
     } 
    } 
} 
+0

我猜不僅看到了什麼論點,而且還有多少也是不可能的。謝謝jfriend00和philipp。 –

+0

@NikolaGeneshki - 我在回答中添加了一些關於'callback.length'的信息。 – jfriend00

1

通過記錄它。通常形成文件的慣例與通過語言執行強制合同一樣好。最常見的情況是,您可以將單個對象傳遞給回調,並且該對象可以具有命名屬性,例如

callback({'names':[], 'types':[], value:0, etc:[] }) 

這樣一來,雙方代碼都可以更容易記錄下來。