ReSharper警告构造函数的JavaScript命名约定

时间:2013-06-25 18:10:48

标签: javascript naming-conventions resharper

在JavaScript中,我喜欢用于构造函数的PascalCase的命名约定和用于其他函数的camelCase。看起来ReSharper配置为这些设置。但是,对于这样的代码:

function Thing(a, b) {
    return {
        prop1: a,
        prop2: b
    };
}

var thing = new Thing(2, 6);

...我收到了这个警告:

  

名称'Thing'与规则'Local Function'不匹配。建议的名称是“东西”。

如果我将Thing更改为:

,则没有任何区别
function Thing(a, b) {
    this.prop1 = a;
    this.prop2 = b;
}

我怀疑只有“公共”功能被认为是构造函数。你们中的任何人都知道ReSharper如何区分“本地”和“构造函数”功能吗?更好的是,你知道如何覆盖这种行为吗?

2 个答案:

答案 0 :(得分:9)

嗯,这是ReSharper中的bug。您可以自己等待或修复它。或者在全球范围内定义它。

不过,这些功能做的事情非常非常不同。你绝对不想把前者称为构造函数。

答案 1 :(得分:0)

如果您希望构造函数是公共的,则可以使用此解决方法:

(function(global){

    function kindOfPrivateFunction(thing){
       //Do something with thing
    }

    global.Thing = function(a, b) {
        this.prop1 = a;
        this.prop2 = b;

        knindOfPrivateFunction(this);
    };

    global.Thing.publicFunction = function() { };

})(this);

或者,如果你不想让resharper抱怨“ThisInGlobalContext”:

(function(){

    function kindOfPrivateFunction(thing){
       //Do something with thing
    }

    this.Thing = function(a, b) {
        this.prop1 = a;
        this.prop2 = b;

        knindOfPrivateFunction(this);
    };

    this.Thing.publicFunction = function() { };

})();

修改

考虑到您的类必须是本地的,您可以使用本地对象来“存储”本地构造函数。但这真的只是一个关闭Resharper的黑客......

(function(){

    var local = {};

    function kindOfPrivateFunction(thing){
       //Do something with thing
    }

    local.Thing = function(a, b) {
        this.prop1 = a;
        this.prop2 = b;

        knindOfPrivateFunction(this);
    };

    local.Thing.prototype.publicFunction = function() { };

    var instance = new local.Thing(1, 2);

})();