3

私はクロージャコンパイラ用にすべてのJavaScriptに注釈を付ける過程にありますが、現在私が持っているコードは、オブジェクト内のクラスの定義に大きく依存しています。

Class.SomeClass = function() {};
Class.SomeOtherClass = function() {};

それよりも:

function SomeClass() {};
SomeClass.prototype = {};

ただし、extendsに注釈を付けようとすると、警告が表示されます...コンパイラは、Class.SomeClassのタイプを判別できないと述べています。

JSC_TYPE_PARSE_ERROR: Bad type annotation. Unknown type Class.SomeObject 
*  @extends Class.SomeObject

以下のコードをADVANCED_OPTIMIZATIONSを使用してクロージャコンパイラに貼り付けます。

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==

(function($) {

    "use strict";

    var Class = {};

    /**
     *  @constructor
     */
    Class.ObjectA = function() {};
    Class.ObjectA.prototype = {};

    /**
     *  @constructor
     *  @extends Class.ObjectA
     */
    Class.ObjectB = function() {};
    Class.ObjectB.prototype = $.extend(new Class.ObjectA(), {
        initialize: function() {}
    });


    window.test = new Class.ObjectB();
    window.test.initialize();

})(jQuery);
4

2 に答える 2

6

答えは明らかではありません。名前空間にを追加@constするだけです。Class

/** @const */
var Class = {};
于 2013-01-31T11:56:00.210 に答える
1

とにかく事前モードでコンパイルするので、goo.provideを使用してbase.jsをリンクするのが最も簡単です。上級モードはbase.js関数を理解するため、継承にはgoog.inheritsを使用する必要があります。 $.extendsと言うよりもはるかに優れています。

したがって、同じことを実現するための私のコードは次のようになります。

// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// @use_closure_library true
// ==/ClosureCompiler==

goog.provide('Class.ObjectA')

/**
*  @constructor
*/
Class.ObjectA = function() {};

goog.provide('Class.ObjectB');
/**
*  @constructor
*  @extends Class.ObjectA
*/
Class.ObjectB = function() {};
Class.ObjectB.prototype =
{
    initialize: function() {}
}

goog.inherits(Class.ObjectB, Class.ObjectA);


window.test = new Class.ObjectB();
window.test.initialize();

コンパイラUIで、goog.baseを追加するクロージャライブラリを追加するオプションを選択する必要があります。

これで、(function($){})(jQuery);のようないくつかのjqueuryスタイルのfooもアプローチに含まれます。高度なコンパイルルートを開始する場合は、これを再評価します(jqueryとクロージャーライブラリの使用を個人的に再評価しますが、advancedでjqueryを使い続けた人を知っています)。詳細モードを下げるには、plovrのようなビルドシステムを検討することもお勧めします。

于 2013-01-31T07:06:00.483 に答える