为什么这个函数被认为是linters的构造函数?

时间:2013-08-02 11:09:26

标签: javascript constructor jslint

我已经重写了我继承的各种代码。并遇到一些我不明白的事情。 jslint和jshint都认为下面的函数是构造函数,我不知道为什么。

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';
    }
}

这是来自查询的回调,使用$ .ajax()查询mediawiki API以自动编辑以更新页面上的价格。如果编辑成功failed未定义,页面将重新加载。如果失败,则failed设置为true,并重置用于触发更新的按钮。

button只是一个按钮元素,wg *变量是mediaWiki对象的一部分,用于访问pagename和url前缀(通常是/index.php)。

有谁知道为什么jshint和jslint似乎认为这个函数应该是new GEReqsDone()而不是GEReqsDone()

1 个答案:

答案 0 :(得分:1)

构造函数是JavaScript中唯一应以大写字母开头的函数。 JSLint / JSHint将看到它以大写的G开头,并假设它是一个构造函数。

这是我们必须确保人们知道该函数应该用作构造函数的唯一约定。有些人会采取防御措施来避免人们错过new关键字:

var SomeConstructor = function () {
    if (!(this instanceof SomeConstructor)) 
        return new SomeConstructor();
}