1

かなり大規模な JavaScript プロジェクトを開始しています。プロジェクトでは、すべてが 1 つ以上の名前空間内に存在するため、グローバル スコープにはわずかな数しか存在しません (現時点では、1 つしかありません)。

物事を整理するために、「モジュール」ではなく、各クラスを独自のファイルに保持したいと思います(他の多くの言語と同じように)。

最終的にすべてのファイルを 1 つの JavaScript ファイルにコンパイルする小さなコンパイル スクリプト (NodeJS を使用) を作成しました。

良い方法があると思ったのですが、JSDoc(3) に協力してもらいたいと思っていて、あまり運がなかったので、間違った方法でこれに取り組んでいるのだろうかと思っています。私が見逃しているJSDocにはいくつかのトリックがあります。

ソースでは、各名前空間はフォルダーであり、各クラスは同じ名前のファイルです。

各クラス ファイルは次のようになります。

var BaseNS = BaseNS || {};
BaseNS.SubNS = BaseNS.SubNS || {};

BaseNS.SubNS.MyClass = (function() {
    function MyClass() {
    }

    Object.defineProperties(MyClass.prototype, {
       'someProp', { 
            getter: function() { return this._someProp = this._someProp || 0; },
            setter: function(val) { this._someProp = val; }
       }
       // ... more
    });

    MyClass.prototype.someMethod = function() {};
    // ... more

    return MyClass;
}}());

一緒にコンパイルすると、コンパイル スクリプトは依存関係を処理してクラスを正しい順序で取得し、重複する名前空間宣言行も削除します。

この方法は比較的クリーンで簡単だと思います。問題は、私が思うように JSDoc ドキュメントを書く方法がわからないことです。

「クラスのような」メソッドを使用したいと思います。これは実際には、DOM から大幅に削除されたアプリケーション用です。また、プロジェクト全体をバニラの最新の JavaScript (つまり、RequireJS を使用しないなど) にしたいと考えています。

これを文書化する方法、または物事を整理するためのより良い方法はありますか?

ありがとう。

4

1 に答える 1

1

昨日、約 4 時間さまざまなことをいじった後、最適な形式を見つけたと思います。これは、適切に解析するためのコメントを最小限に抑えながら、効率の良い形式を組み合わせたものです。

"use strict";

/** @namespace */
var NS = NS || {};

/** @namespace */
NS.Sub = NS.Sub || {};

/**
 * @class
 */
NS.Sub.SomeClass = (function(NS) {
    /**
     * @constructor
     * @lends NS.Sub.SomeClass
     */
    var SomeClass = function() {
        /** @method */
        this.someFunc = function(cookie) {

        };

        Object.defineProperties(this, /** @lends NS.Sub.SomeClass */ {
            /**
             * @type {number}
             * @instance
             */
            somePublicProp: {
                getter: function() { return this._somePublicProp || 24; },
                setter: function(val) { this._somePublicProp = val; }
            }
        });
    };

    return SomeClass;
})(NS);

これを改善するための推奨事項があれば、ぜひお聞かせください。特に、の必要性を取り除く方法がわかりませんvar SomeClass; ... return SomeClass。直接 (できれば名前なしで) 返したいのですが、そうすると JSDoc がメソッドを追跡できなくなります。これは、より多くのコメントを意味することを意味し、クールではありません。

于 2013-06-14T06:58:41.307 に答える