8

GoogleClosureCompilerで警告が表示されます

警告-グローバルこのオブジェクトの危険な使用

これが例です。エラーラインとオフセットは単語の先頭を指しますthis

function aToggle() {
  if(shown)
    toggle.show()
  else
    toggle.hide()
  $(this).text(shown ? 'Click to hide' : 'Click to show')
  shown = !shown
}
link.onclick = aToggle

匿名メソッドに変更するだけですがaToggle、ファイル内の他の場所で再利用しているため、名前を付ける必要があります。

aToggle--としてマーク/**@constructor*/することはできますが、コンストラクターではありません。この警告を削除するために使用できる別のアノテーションはありますか、それともコンストラクターとしてマークするか、無用な警告を大量に表示するかの間で立ち往生していますか?

4

3 に答える 3

14

編集:私はClosure:The Definitive Guideを読んでいましたが、イベントハンドラーの前に/** @this {Element} */注釈を追加するだけで、ClosureCompilerが文句を言うのをやめることができることに気づきました。

ClosureCompilerの警告リファレンスを参照してください。注釈が付けられていないか、クラス内にthisある関数内で使用すると、ClosureCompilerはこの警告を出します。コンパイラは、関数が別のオブジェクトのコンテキストで呼び出されたときに使用しないことを前提としています(これはイベントコールバックが行うことです)。/** @constructor */prototypethis

ClosureCompilerがこの警告で文句を言うのをやめるために変更しなければならないかもしれないいくつかの場所:

  • link.onclick = ...を台無しにする必要があるため、直接使用しないでください。代わりに、 jQueryのイベントオブジェクトにはが含まれているため、jQueryを使用してイベントハンドラーをラップします。thise || window.evente.currentTarget
  • this内で使用している場合は、関数の2番目のパラメーターにjQuery.each置き換えてください。this例:jQuery.each([1, 2, 3], function(i, val) { ... val ... };
于 2010-10-29T10:19:46.413 に答える
1

JQueryについてはよくわかりませんが、次のようなものを使用できると思います。

function aToggle(event) {
  if(shown) {
    toggle.show();
  } else {
    toggle.hide();
  }
  $(event.target).text(shown ? 'Click to hide' : 'Click to show');
  shown = !shown;
}

$(link).bind('click', aToggle);

クロスブラウザの汎用イベントオブジェクトからクリックされたターゲットを取得します。

編集:アドバイスの言葉として、{ }あなたif elseと一緒に使用し、セミコロンを使用してください、あなたのためにそれをするためにあなたのブラウザに頼らないでください。

クロージャーツールを最大限に活用するには、クロージャーライブラリをコンパイラーと組み合わせて使用​​することをお勧めします(必須ではありません)。

于 2010-10-27T19:51:47.130 に答える
1

まず、あなたはおそらくそれを間違ってやっています。:-)

@Janは正しい考えを持っていました。しかし、おそらく次のようにする必要があります。

(function(){
    var toggle = $("#toggle");
    $("#yourLinksID, .orClassName").click(function(e) {
        var shown = toggle.toggle().is(":visible");
        $(this).html(shown ? "Click to hide" : "Click to show");
        e.preventDefault();
    });
}());

コンパイルするとき:

次のjQuery外部ファイルを使用して、クロージャーコンパイラにjQueryで何を実行するかを指示します:http://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/jquery-1.4.3.externs。 js

警告メッセージを消したいだけの場合は、に置き換えthislinkください。

于 2010-10-27T20:14:28.003 に答える