8

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

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

var thing = new Thing(2, 6);

...我收到此警告:

名称“事物”与规则“本地函数”不匹配。建议的名称是“事物”。

如果我更改Thing为以下内容并没有什么不同:

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

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

4

2 回答 2

9

好吧,这是 ReSharper 中的一个错误。您可以等待或自行修复。或者在全局范围内定义它。

顺便说一句,这些功能做了非常非常不同的事情。您绝对不想将前者称为构造函数。

于 2013-07-31T22:04:28.017 回答
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);

})();
于 2013-08-07T21:14:02.797 回答