使用自定义继承系统记录复杂的JavaScript对象

时间:2014-03-07 09:19:54

标签: javascript documentation ecmascript-5 jsdoc jsdoc3

我目前正在尝试将现有的服务器端JavaScript API从其现有的手动复制和粘贴继承系统迁移到更好,更可靠的系统。不能使用纯原型,因为对象的状态(变量)也必须继承,不能在父对象中覆盖。

所以我正在考虑使用John Reisig的优秀解决方案: http://ejohn.org/blog/simple-javascript-inheritance/

哪些工作人员非常适合我的情况。

我现在面临的唯一挑战是大多数文档框架都不会处理像这样构造的对象(或者我只是不知道如何告诉他们)。所以我的问题是,我怎样才能记录这样的课程:

namespace.ClassA = Class.extend({
    name : "",

    init: function(name){
        this.name = name;
    }
});

namespace.ClassB = ClassA.extend({
    sayName : function(){
        console.log(this.name);
    }
});

我更喜欢JsDoc,但我想不出用JsDoc记录这种类的方法。我也尝试过NaturalDocs,它可以很好地工作,但我真的不希望所有这些额外的python东西都在构建过程中。

我认为我遇到的主要问题是命名空间

例如:

    /** @memberof namespace**/
    namespace.ClassB = ClassA.extend(
    /** @lends ClassB.prototype **/
    {
            /** @constructs **/
            init : function(){
            },

    sayName : function(){
        console.log(this.name);
    }
});

不会在命名空间“namespace”

中包含或显示ClassB

1 个答案:

答案 0 :(得分:1)

查看以下内容是否适合您。请注意,您的代码段本身并不是有效的JavaScript,因为namespace未在任何地方定义。无论如何,jsdoc将处理它。我必须要做的就是比我本来更啰嗦。几点说明:

  1. 您可以将定义ClassA的doclet放在包含namespace.ClassA的行前面。

  2. @lends代码需要完整路径:/** @lends namespace.ClassB.prototype */

  3. 以下是代码:

    /**
     * @namespace namespace
     */
    
    namespace.ClassA = Class.extend({
        name : "",
    
        /**
         * @constructor
         * @memberof namespace
         * @name ClassA
         * @param name Blah.
         */
        init: function(name){
            this.name = name;
        }
    });
    
    /**
     * @constructor
     * @memberof namespace
     * @name ClassB
     */
    namespace.ClassB = ClassA.extend(/** @lends namespace.ClassB.prototype */ {
        /**
         * @method
         */
        sayName : function(){
            console.log(this.name);
        }
    });