WARNUNG - gefährliche Verwendung des globalen Objekts

8

Im Google Closure-Compiler erhalte ich die Warnung

  

WARNUNG - gefährlicher Gebrauch des globalen Gegenstandes

Hier ist ein Beispiel. Die Fehlerzeile und der Offset beziehen sich auf den Anfang des Wortes this

%Vor%

Ich würde es einfach in eine anonyme Methode ändern, aber ich verwende aToggle an anderer Stelle in der Datei erneut, daher muss es benannt werden.

Ich könnte aToggle als /**@constructor*/ markieren - aber es ist kein Konstruktor. Gibt es eine weitere Anmerkung, die ich verwenden kann, um diese Warnung zu beseitigen, oder bin ich fest zwischen der Markierung als Konstruktor oder der Anzeige einer Menge nutzloser Warnungen?

    
George Bailey 27.10.2010, 19:31
quelle

3 Antworten

13

Bearbeiten : Ich habe Closure: The Definitive Guide gelesen und festgestellt, dass Sie einfach die /** @this {Element} */ Annotation vor Ihrem Event-Handler, damit Closure Compiler aufhört, sich zu beschweren.

Weitere Informationen finden Sie in der Closure Compiler-Warnung . Der Closure-Compiler gibt diese Warnung aus, wenn Sie this in einer Funktion verwenden, die nicht entweder mit /** @constructor */ annotiert ist oder sich innerhalb von prototype einer Klasse befindet. Der Compiler nimmt an, dass Sie niemals this verwenden, wenn eine Funktion im Kontext eines anderen Objekts aufgerufen wird (was Ereignisrückrufe tun).

Einige Stellen, die Sie möglicherweise ändern müssen, damit Closure Compiler mit dieser Warnung nicht mehr klagt:

  • Benutze link.onclick = ... nicht direkt, weil du mit this und e || window.event herumspielen musst. Verwenden Sie stattdessen jQuery, um den Ereignishandler zu umbrechen, da das Ereignisobjekt von jQuery e.currentTarget hat.
  • Wenn Sie this in jQuery.each verwenden, ersetzen Sie this durch den zweiten Parameter Ihrer Funktion. ZB jQuery.each([1, 2, 3], function(i, val) { ... val ... }; .
yonran 29.10.2010, 10:19
quelle
1

Ich kenne JQuery nicht sehr gut, aber ich denke, Sie können etwas wie:

verwenden %Vor%

Hier können Sie das angeklickte Ziel von einem generischen cross-browser-Ereignisobjekt abrufen.

BEARBEITEN: Als Ratschlag verwenden Sie { } mit Ihrem if else und verwenden Sie Semikolons, verlassen Sie sich nicht auf Ihren Browser, um es für Sie zu tun.

Um die Closure-Tools optimal zu nutzen, wird empfohlen, die Closure-Bibliothek in Kombination mit dem Compiler zu verwenden (wenn auch nicht notwendig)

    
Jan 27.10.2010 19:51
quelle
1

Erstens machst du es wahrscheinlich falsch. : -)

@Jan hatte die richtige Idee. Aber Sie sollten wahrscheinlich mit dem folgenden gehen:

%Vor%

und beim Kompilieren:

Verwenden Sie die folgende externe jQuery-Datei, die dem Closure-Compiler mitteilt, was in jQuery geschieht: Ссылка

Wenn Sie möchten, dass die Warnmeldung verschwindet, ersetzen Sie this durch link .

    
David Murdoch 27.10.2010 20:14
quelle