8

JavaScript では、コンストラクター関数には PascalCase、その他の関数にはキャメルケースという命名規則が気に入っています。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

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 に答える