2013-06-25 106 views
1
Create: function (title, text, orientation, trigger, layout) { 
     $(this).attr 
    }, 

觸發器參數必須接收兩個非常具體的詞之一:'懸停'或'點擊',我想不出一個好辦法來緩解執行這個功能。哪個是驗證函數接收參數的最佳方法

我也覺得有些解決方案:

  1. 我可以嘗試在功能驗證參數一旦已經內,並返回一個「console.info」一個錯誤的參數有突破的情況下執行後右已發送,通知他的錯誤的開發商

  2. 我可以創建一個ENUM,並提供它作爲開發接口(這仍然讓開發者們爲了讀它正確地使用它)

  3. 在輸入此帖子時發生了我,我可以爲選項設置標準值,因此它們是可選的。

我只是不知道哪一個是這種情況下的最佳方法。我能否假設願意使用代碼的開發人員必須閱讀代碼以找到實現它的最佳方式,或者(如我所料),我應該關注像我描述的那些驗證?哪一個是最好的?

+3

假設您的意圖是創建公開可用的東西,它應該有一個發佈的API來定義參數,並且不應該要求開發人員閱讀代碼。 –

+2

您是否想知道如何驗證* one *特定參數的值或如何處理如此多的參數。就個人而言,如果有超過3個參數,並且如果可以有可選的參數,我會讓該函數接受一個對象。使用默認值是很好的IMO。 –

+0

@JamesMontagne如果聽起來像我願意將它發佈到某個地方,我很抱歉。這不僅僅是一個真正的問題,而是一個概念性的問題,但是我正在一家公司開發,並且我想使用最佳實踐,因爲其他開發人員也會使用這些代碼。 – v1n1akabozo

回答

0

直接比較字符串是JavaScript中的常見做法。 ENUM狀結構,雖然容易實現,通常不很習慣,因爲你要麼必須定義您的ENUM樣的全局或做類似:

application.enums.myObject.hover= 1; 
application.enums.myObject.click= 2; 

myObject= new application.constructors.MyObject(); 
myObject.create(title, text, orientation, application.enums.myObject.hover, layout) 

以這種方式唯一的應用程序是全球性的,但輸入的應用.enums.myObject是一個痛苦。

如何處理錯誤:

選項1:拋出一個異常:

Create: function (title, text, orientation, trigger, layout) { 
     if (trigger !== "hover" && trigger !== "click") { 
      throw "error: invalid parameter trigger"; 
     } 
    }, 

,除非你有一個catch子句某處這將崩潰的腳本。在某些情況下,讓派對崩潰總比沒有提供一種方式來知道什麼是錯的更好。如果你打算捕捉這些異常(而不是讓它們只是使腳本崩潰),我建議通過爲錯誤等進行類化來正確地執行它。

選項2:返回null。

Create: function (title, text, orientation, trigger, layout) { 
     if (trigger !== "hover" && trigger !== "click") { 
      return null; 
     } 
    }, 

如果您要使用函數的返回值,此方法效果會更好。在調試時,當嘗試使用返回值時會看到「對象沒有名爲X的屬性」錯誤(或者如果您使用它的話,您的值將被強制轉換爲「null」字符串)。

選項3:靜靜地忽略錯誤,什麼都不做。你的腳本可能會自行崩潰,或者它什麼都不會做。不建議

意見:

1 - 不要在生產代碼中使用控制檯對象。這不是標準的一部分,除非你打開開發者控制檯,否則IE不會將它暴露給網頁。

2 - 不要用大寫字母開頭函數名,除非它是一個函數,應該用'新'關鍵字(即構造函數)。

+0

我同意這兩個陳述,這只是我沒有使用JavaScript和網頁開發,所以我不知道我是否應該關心實施。任何讀完函數的人都應該知道如何使用它,所以我不知道我必須走多遠才能進行驗證並指出它的使用錯誤。 – v1n1akabozo

+0

@ v1n1akabozo答案更新與處理錯誤的技術。 – Hoffmann

+0

那是我等待男人的答案,我很感激。拋出一個異常似乎比使用console.info來提示錯誤好得多,並且將返回值設置爲null也非常直觀。謝謝 – v1n1akabozo

相關問題