2

したがって、少なくとも Closure Compiler では、デバッグは新しい意味を持っているようです。

私はかなり大きなコード ベースを持っており、問題を切り分けるのは難しい作業です。エントリ ポイント クラスで、依存関係をインスタンス化します。これらの 1 つが正しく作成されていません。オブジェクトはそこにありますが、そのコンストラクターが呼び出されていません。

これは ADVANCED モードでのみ発生するため、 --debug フラグを渡そうとしましたが、ほら、バグがなくなり、コンストラクターが呼び出されます。それは驚くべきことです。特定のコードをコピーして貼り付けることはできません。

/**
 * @param {Element} parent
 * @param {Object}  opts
 * @constructor
 */
ns.App = function(parent, opts) {
    this.options = new ns.Options(opts || {});

    var w = this.options.width || parent.offsetWidth;
    var h = this.options.height || parent.offsetHeight;
    this.view = new ns.AppView(w, h);
    this.history = new ns.CommandManager();

    // ....

    // this one doesn't get called
    this.amx_ = new ns.ActivityManager(this, this.options);
    // this one does
    this.output_ = new ns.Writer();
    this.bind_();
};
4

1 に答える 1

2

Closure-compiler では、デバッグ フラグによってエラーが解消される場合、通常は名前変更の競合が発生していることを示します。これは、プロパティがコンパイラに対して完全に定義されていない、外部で定義されたオブジェクトにプロパティを設定することによって発生する可能性があります。コンパイラは、プロパティの名前を既存のプロパティと同じ名前に変更します。

obj.propこれは、引用符付き構文 ( ) を使用して宣言されたプロパティをドット付き構文 ( ) を使用して参照することによっても発生する可能性がありますobj['prop']。定義上、コンパイラはこれらを異なるプロパティとして認識します。

--warning_level VERBOSE未定義のプロパティへのアクセスを識別するのに役立つように、必ずオンにしてください。あなたの特定のケースが認識されない可能性はまだありますが。

于 2012-08-31T13:51:09.657 に答える