2014-03-07 14 views
1

我正在嘗試從現有的手動拷貝中遷移現有的服務器端JavaScript API,並將繼承系統粘貼到更好,更可靠的系統。純原型不能使用,因爲對象的狀態(變量)也必須被繼承,並且不能在父對象中被重寫。使用自定義繼承系統記錄複雜的JavaScript對象

所以我想利用約翰Reisig一個很好的解決方案說明如下: http://ejohn.org/blog/simple-javascript-inheritance/

這對於我的情況workrs很大。

我現在唯一面臨的挑戰是大多數文檔框架不會處理像這樣構造的對象(或者我只是不知道如何告訴他們)。所以我的問題是,我怎麼能文檔類是這樣的:

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); 
    } 
}); 

將不包括或命名空間「命名空間」

+0

Jsdoc可以,只要你使用樣式它推斷出不少東西給你明白。如果你不這樣做,它仍然可以明確地告訴jsdoc你的意思。你只需要在你的文檔中更加冗長(使用更多的@標籤)。爲了幫助我們提供一個能夠達到標準的答案,如果您能告訴我們您嘗試了什麼以及爲什麼不滿足您的要求,這將對我們有所幫助。否則,提供一個能夠產生某種結果的答案非常簡單,只有在你回覆時,這不是你想要的,等等。 – Louis

回答

1

中顯示ClassB的看看下面的作品您。請注意,您的代碼段不是有效的JavaScript本身,因爲namespace沒有在任何地方定義。無論如何,jsdoc會處理它。我必須做的是比我原本要做的更加冗長。有幾個注意事項:

  1. 你可以把在有namespace.ClassA行的前面定義ClassA的doclet中。

  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); 
    } 
}); 
+0

真的很好!非常感謝! – Chris