2015-04-17 11 views
7

dort Angenommen, in einem Verschluss ganze Klasse zu setzen ist eine globale Variable, die eine FunktionWie verschleiern wir globalen Variable YUI verwenden, ohne

function MyClass(){} 

und es gibt Methoden dieser Klasse wie

ist
MyClass.func1 = function() 
{ 
} 

Ich möchte sicherstellen, dass YUI Komprimierung und Verschleierung funktioniert, ohne ganze Klasse in einem Verschluss wie

Gibt es eine Möglichkeit, die YUI-Komprimierung zu aktivieren, ohne dies zu tun?

+0

Ich fürchte, dass YUI Die Komprimierung ignoriert globale Variablen. Warum sollte die Klasse global sein? Referenz-Link http://alistapart.com/article/javascript-minification-part-II –

+0

@RaunakKathuria Ja, eins, weil es ein existierendes Produkt ist, und auch, weil die globale Klasse zu halten sicherstellt, dass nur eine Instanz dieser Klasse erstellt werden kann . – gurvinder372

+2

Die Klasse global zu halten hat nichts mit der Anzahl der Instanzen zu tun, die dazu führen können ... – dandavis

Antwort

2

Nun, ich nehme an, Sie könnten es in eine anonyme Funktion wickeln, bevor Sie es komprimieren, und dann entfernen Sie einfach die anonyme Funktion nach.

Auch stellen Sie sicher, Prototyp verwenden;)

(function() { 
    function MyClass(){} 
    MyClass.prototype.func1 = function() 
    { 
    } 
})(); 

Ergebnisse in:

(function(){function a(){}a.prototype.func1=function(){}})(); 

Und nehmen Sie nur die anonyme Funktion aus:

function a(){}a.prototype.func1=function(){} 
+0

Ich verwende keinen Prototyp, und es ist zu viel Änderung zu diesem Zeitpunkt. Gibt es eine Möglichkeit, dies ohne Verwendung eines Prototyps zu tun? – gurvinder372

+0

Nun, Prototyp ist nützlich zum Erstellen von Instanzen eines Objekts. Es kann weiterhin so verwendet werden, wie Sie sind, aber neue Instanzen von MyClass haben keinen Zugriff auf MyClass.func1. [Siehe hier] (http://stackoverflow.com/questions/9582341/adding-new-properties-to-constructor-function-without-prototype) –