javascript - 为什么这个函数被 linter 认为是构造函数?

标签 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 将设置为 true,并重置用于触发更新的按钮。

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

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

最佳答案

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

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

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

关于javascript - 为什么这个函数被 linter 认为是构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18015414/

相关文章:

jquery - JSLint 显示了很多错误,但我的程序运行良好

javascript - AppleScript 通过 JavaScript 将值设置为 Web 表单输入字段

java - 为什么一个方法引用了 "throws"... 也抛出的 ctor?

jslint - 如何修复 JSLint 不安全 ^ 错误?

java - 使用自定义适配器创建列表时出现“无空构造函数”logcat 错误

c++ - 使用默认参数转发引用?

javascript - 为什么 JSLint 使用此代码给我一个 "Unexpected ' .'"错误?

javascript - 切换 Div Javascript

javascript - Greasemonkey:转发整页内容

javascript - 滚动到 div 不起作用