2015-04-17 17 views
7

Załóżmy, że jest to zmienna globalna, która jest funkcjąJak zaciemniać zmienną globalną używając YUI pominięciem całą klasę wewnątrz zamknięcia

function MyClass(){} 

i istnieją metody tej klasy, takie jak

MyClass.func1 = function() 
{ 
} 

Chcę się upewnić, że kompresja i zaciemnianie YUI działają bez umieszczania całej klasy w zamknięciu, takim jak

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

Czy istnieje sposób na kompresję YUI bez tego?

+0

Obawiam się, że YUI kompresja ignoruje zmienne globalne, jakikolwiek szczególny powód, dla którego chcesz, aby klasa była globalna? Link referencyjny http://alistapart.com/article/javascript-minification-part-II –

+0

@RaunakKathuria Tak, ponieważ jest to istniejący produkt, a także dlatego, że zachowanie klasy globalnej zapewnia, że ​​tylko jedna instancja może zostać utworzona dla tej klasy . – gurvinder372

+2

utrzymanie globalnej klasy nie ma nic wspólnego z liczbą instancji, które mogą wyniknąć ... – dandavis

Odpowiedz

2

Cóż, przypuszczam, że można go zawinąć w anonimową funkcję przed skompresowaniem, a następnie po prostu usunąć funkcję anonimową.

Również upewnić się, że używasz prototyp;)

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

Wyniki w:

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

i po prostu wyjąć anonimową funkcję:

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

Nie używam prototypu i na tym etapie jest to zbyt duża zmiana. Czy istnieje sposób, aby to zrobić bez użycia prototypu? – gurvinder372

+0

Cóż, prototyp jest przydatny do tworzenia instancji obiektu. Można go nadal używać w taki sposób, w jaki jesteś, ale nowe instancje MyClass nie będą miały dostępu do MyClass.func1. [Zobacz tutaj] (http://stackoverflow.com/questions/9582341/adding-new-properties-to -constructor-function- without -prototype) –