2

このコードを取得してコンパイルすると (高度な最適化)

/**@constructor*/
function MyObject() {
    this.test = 4
    this.toString = function () {return 'test object'}
}
window['MyObject'] = MyObject

このコードを取得します

window.MyObject=function(){this.test=4;this.toString=function(){return"test object"}};

Closure Compiler を使用して toString 関数を削除する方法はありますか?

4

3 に答える 3

4

toStringは暗黙的に呼び出し可能であるため、Closure コンパイラが の結果がMyObject文字列に強制されないことを証明できない限り、それを保持する必要があります。

いつでも明示的なデバッグ コードとしてマークできます。

this.test = 4;
if (goog.DEBUG) {
  this.toString = function () { return "test object"; };
}

次に、非デバッグビルドで、コンパイルします

goog.DEBUG = false;

http://closure-library.googlecode.com/svn/docs/closure_goog_base.js.source.htmlを参照してください。

/**
 * @define {boolean} DEBUG is provided as a convenience so that debugging code
 * that should not be included in a production js_binary can be easily stripped
 * by specifying --define goog.DEBUG=false to the JSCompiler. For example, most
 * toString() methods should be declared inside an "if (goog.DEBUG)" conditional
 * because they are generally used for debugging purposes and it is difficult
 * for the JSCompiler to statically determine whether they are used.
 */
goog.DEBUG = true;
于 2010-11-12T18:49:18.633 に答える