1

我目前正在尝试将现有的服务器端 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);
    }
});

不会在命名空间“命名空间”中包含或显示 ClassB

4

1 回答 1

1

看看以下内容是否适合您。请注意,您的代码片段本身不是有效的 JavaScript,因为namespace没有在任何地方定义。无论如何,jsdoc 都会处理它。我必须做的是比我本来应该做的更冗长。几点注意事项:

  1. 您可以将定义的 doclet 放在ClassA具有namespace.ClassA.

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

这是代码:

/**
 * @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);
    }
});
于 2014-03-07T17:32:52.513 回答