我正在开始一个相当大的JavaScript项目。该项目将在一个或多个名称空间中存在所有内容,因此在全局范围内只存在少量事物(目前只有一件事)。
为了保持组织有序,我希望将每个班级保存在自己的文件中(很像其他许多语言),而不是“模块”。
我构建了一个小编译脚本(使用NodeJS),它将在一天结束时将所有文件编译成一个JavaScript文件。
我认为我有一个很好的方法,但是我想让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中删除的应用程序。另外,我希望整个项目都是vanilla,现代JavaScript(即没有RequireJS等)
任何想法如何记录,或更好的安排方式?
感谢。
答案 0 :(得分:1)
在昨天玩了大约四个小时的各种事情之后,我想我已经找到了最佳格式,它结合了很好的效率形式,同时允许最少的评论以便正确解析事物。
"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失去了对我的方法的跟踪,这意味着更多的评论,这并不酷。