2015-04-17 31 views
7

假設裏面有一個全局變量,它是一個功能我如何混淆使用YUI全局變量沒有把全班封閉

function MyClass(){} 

,並有諸如

MyClass.func1 = function() 
{ 
} 
這個類的方法

我想確保YUI壓縮和混淆工作無需將整個類放入關閉中,如

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

有沒有辦法讓YUI壓縮工作而沒有這樣做?

+0

恐怕YUI壓縮忽略全局變量,爲什麼你想要類是全局的任何特定原因?參考鏈接http://alistapart.com/article/javascript-minification-part-II –

+0

@RaunakKathuria是的,一個因爲它是一個現有的產品,同時也是因爲保持全局類可以確保只有一個實例可以創建該類。 – gurvinder372

+2

保持全局類與可能導致的實例數無關...... – dandavis

回答

2

嗯,我想你可以在壓縮它之前將它封裝在一個匿名函數中,然後在刪除匿名函數之後。

另外,還要確保你使用的原型;)

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

結果:

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

而只是採取了匿名函數:

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

我沒有使用原型,並且在這個時間點它太多了。有沒有辦法做到這一點,而不使用原型? – gurvinder372

+0

那麼,原型對於創建對象的實例很有用。它仍然可以按照您的方式使用,但MyClass的新實例將無法訪問MyClass.func1。 [見這裏](http://stackoverflow.com/questions/9582341/adding-new-properties-to-constructor-function-without-prototype) –