1

我一直在重写我“继承”的各种代码,遇到了一些我不理解的东西。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 对象的一部分,这里用于访问页面名称和 url 前缀(通常是/index.php)。

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

4

1 回答 1

1

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

这是我们必须确保人们知道该函数应该用作构造函数的唯一约定。有些人防御性地写作以避免人们错过new关键字:

var SomeConstructor = function () {
    if (!(this instanceof SomeConstructor)) 
        return new SomeConstructor();
}
于 2013-08-02T11:17:21.313 回答