2013-08-02 169 views
1

我一直在重寫我已經「繼承」的各種代碼,並遇到了一些我不明白的東西。 jslint和jshint都認爲下面的函數是一個構造函數,我不知道爲什麼。爲什麼這個函數被認爲是由linters構造的?

function GEReqsDone(failed) { 
    if (!failed) { 
     alert('Thank you for your submission! The page will now be reloaded.'); 
     document.location.replace(mwConfig.wgScript + '?title=' + encodeURIComponent(mwConfig.wgPageName) + '&action=purge'); 
    } else { 
     alert('An error occurred while submitting the edit.'); 
     button.disabled = false; 
     button.innerHTML = 'Update price'; 
    } 
} 

這是使用$阿賈克斯(查詢)的回調,查詢MediaWiki的API自動編輯更新頁面上的價格。如果編輯成功failed未定義並且頁面重新加載。如果失敗,則failed設置爲true,並重置用於觸發更新的按鈕。

button是一個簡單的按鈕元件時,WG *變量在這裏用於訪問頁面名和URL前綴(通常/index.php)MediaWiki的對象的一部分。

有誰知道爲什麼jshint和jslint似乎認爲這個函數應該是new GEReqsDone()而不是GEReqsDone()

+4

構造函數是在JavaScript中唯一的功能應該以大寫字母開頭。 JSLint/JSHint會看到它以大寫字母G開頭,並假定它是一個構造函數。 – RobH

+0

這真的很簡單嗎?非常感謝。 – Onei

+1

[JSLint說新關鍵字丟失]的可能重複(http://stackoverflow.com/questions/9650392/jslint-says-new-keyword-is-missing) – apsillers

回答

1

構造函數是JavaScript中唯一應該以大寫字母開頭的函數。 JSLint/JSHint會看到它以大寫字母G開頭,並假定它是一個構造函數。

這是我們必須確保人們知道函數應該用作構造函數的唯一約定。有些人寫的防守,以避免人失蹤的new關鍵字:

var SomeConstructor = function() { 
    if (!(this instanceof SomeConstructor)) 
     return new SomeConstructor(); 
} 
相關問題