2015-04-17 63 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) –