10

親愛的人們,我應該如何處理Closure Compiler輸出的這些錯誤警告? 非常感謝你對你的想法和代碼improtements這個特殊類型的錯誤:`不能實例化非構造函數Closure Compiler警告?

  1. JSC_WRONG_ARGUMENT_COUNT:功能parseInt函數:調用1個參數(S)。函數需要至少2個參數和不超過2個參數。在線路593字符12
    if (parseInt(jQuery.browser.version) < 7) {

  2. JSC_NOT_A_CONSTRUCTOR:在線路708字符不能實例非構造15
    lightbox = new Lightbox(this, opts.lightbox);

  3. JSC_NOT_A_CONSTRUCTOR:在線路1265字符不能實例非構造19
    var scroller = new Scroller($(this), opts);

回答

18

編號1:
此警告意味着您在函數調用中傳遞了錯誤數量的參數。

Here是一個更好的解釋

2號& 3:
編譯器期望所有構造函數被打上標籤JSDoc @constructor,就像這樣:

/** 
* @constructor 
*/ 
function MyClass() { 
    this.foo = 'bar'; 
} 
var obj = new MyClass(); 
alert(obj.foo); 

Here是更好的解釋。

+0

那麼你會怎麼做,如果代碼是由第三方提供的庫已被混淆? – AndroidDev 2017-05-31 09:57:30

+0

這是一個艱難的,我的朋友。除了Ye Olde「猜測」,你別無選擇。使用斷點和查詢對象屬性...猜猜它們是什麼並測試結果 - 祝您好運 – 2017-05-31 15:22:11

3

對於第一個,它希望你傳遞兩個參數給parseInt:value和radix。對於10爲基礎的數字(這是你的情況下),你需要(並不真的需要,但它要你)調用

parseInt(jQuery.browser.version, 10) 
+0

您不*指定第二個參數,但您應該:「雖然此參數是可選的,但始終指定它可以消除讀者的困惑並保證可預測的行爲。當不指定基數時,不同的實現會產生不同的結果。「 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt – 2011-03-14 17:38:52

+0

@lwburk:我沒有說你必須指定兩個參數,我說閉包編譯器希望你 - 這就是它的抱怨。請刪除您的投票。 – Andrey 2011-03-14 19:17:15

+1

+1爲了反擊醜惡downvote – Paulpro 2012-05-20 02:56:42

相關問題