Как множественное наследование JsDoc или миксины?

Как документировать примеси или множественное наследование?

/**
 * @class Parent
 */
function Parent() {
}

Parent.prototype.parentTest = 5;

/**
 * @class Mixin
 */
function Mixin() {
}

Mixin.prototype.mixinTest = 5;

/**
 * @class Child
 * @augments Parent
 * @mixin Mixin
 */
function Child() {
}

Есть что-нибудь официальное от JsDoc? Если нет, то как бы вы предпочли, чтобы это было написано?


person Tower    schedule 30.01.2011    source источник
comment
По возможности избегайте множественного наследования. Это может стать действительно грязным. В основном для ремонтника.   -  person Raynos    schedule 30.01.2011
comment
Миксины полезны. Они как дополнительный набор инструментов, который вы можете взять с собой куда угодно. Они широко используются в ExtJS 4 и Dojo.   -  person Tower    schedule 30.01.2011


Ответы (2)


Несколько @augments на самом деле поддерживаются JsDoc Toolkit (я не пробовал, но их модульные тесты предполагают это, ищите "несколько").

Для Mixins вы можете использовать @lends и @borrows, см. примеры здесь: http://code.google.com/p/jsdoc-toolkit/wiki/CookBook

person meyertee    schedule 30.01.2011

Как насчет:

@mixin [<MixinName>]

Добавьте к любым объектам, которые смешиваются с:

@mixes <OtherObjectPath>

Взято из ссылки на документацию:

/**
 * This provides methods used for event handling. It's not meant to
 * be used directly.
 *
 * @mixin
 */
var Eventful = {
    /**
     * Register a handler function to be called whenever this event is fired.
     * @param {string} eventName - Name of the event.
     * @param {function(Object)} handler - The handler to call.
     */
    on: function(eventName, handler) {
        // code...
    },

    /**
     * Fire an event, causing all handlers for that event name to run.
     * @param {string} eventName - Name of the event.
     * @param {Object} eventData - The data provided to each handler.
     */
    fire: function(eventName, eventData) {
        // code...
    }
};


/**
 * @constructor FormButton
 * @mixes Eventful
 */
var FormButton = function() {
    // code...
};
FormButton.prototype.press = function() {
  this.fire('press', {});
}
mix(Eventful).into(FormButton.prototype);

person cchamberlain    schedule 22.04.2015