2015-04-17 6 views
7

Supponiamo che è una variabile globale che è funzioneCome faccio Oscurazione variabile globale utilizzando YUI senza mettere intera classe all'interno di una chiusura

function MyClass(){} 

e ci sono metodi di questa classe come

MyClass.func1 = function() 
{ 
} 

voglio assicurare che la compressione YUI e offuscamento funziona senza mettere tutta la classe all'interno di una chiusura come

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

C'è un modo per far funzionare la compressione YUI senza farlo?

+0

temo che YUI la compressione ignora le variabili globali, un motivo particolare per cui vuoi che la classe sia globale? Link di riferimento http://alistapart.com/article/javascript-minification-part-II –

+0

@RaunakKathuria Sì, uno perché è un prodotto esistente e anche perché mantenere la classe globale garantisce che solo una istanza possa essere creata di quella classe . – gurvinder372

+2

mantenere la classe globale non ha nulla a che fare con il numero di istanze che possono risultare ... – dandavis

risposta

2

Bene, suppongo che potresti racchiuderlo in una funzione anonima prima di comprimerlo, e quindi rimuovere semplicemente la funzione anonima dopo.

assicurarsi che si sta utilizzando prototipo anche;)

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

risultati in:

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

e basta prendere la funzione anonima:

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

Non sto usando il prototipo, ed è troppo di un cambiamento in questo momento. C'è un modo per farlo senza usare il prototipo? – gurvinder372

+0

Bene, il prototipo è utile per creare istanze di un oggetto. Può ancora essere usato come sei, ma le nuove istanze di MyClass non avranno accesso a MyClass.func1. [Vedi qui] (http://stackoverflow.com/questions/9582341/adding-new-properties-to-constructor-function-without-prototype) –

Problemi correlati