2012-10-04 18 views
5

我在EaselJS庫的例子中看到了這段代碼 - 它所做的是將整個createjs庫的命名空間分配給「window」。將Javascript命名空間設置爲窗口:壞主意?還是輝煌?

<script> 
var createjs = window; 
</script> 

我的問題是這樣的: 樹立了一個庫窗口真正愚蠢的想法的命名空間?難道它不是通過使所有名稱空間變量突然變成全局作用域來擺脫使用名稱空間的重點嗎?

我能看到的唯一優點是可以讓你爲對象編寫較短的構造器。例如打字:中

stage = new Stage(canvas); 

代替:

stage = new createjs.Stage(canvas); 

這是一個壞主意,或者是莫名其妙的輝煌,或者只是無害古怪?

+0

它可以讓你改變'createjs'的範圍。我從來沒有真正看到過這樣做。 – Blender

+0

如果不是全球性的,你還要如何揭露它? –

+0

@ user1689607 - 它的一個命名空間。我的理解是你不想將它作爲一個全局對象來公開。這就是它存在的原因。減少變量命名衝突的變化。但我不確定:因此,這個問題。 –

回答

2

對我來說,一個好主意是許多人應該積極使用的東西。這就是爲什麼我認爲這個技巧是一個壞主意:總之,它實際上打敗了命名空間的想法:如果很多人(=其他流行的JS庫的作者)開始使用window作爲它們的命名空間根,那麼方法重寫方法的危害重寫另一種方法將會否定這種方法的任何可能的優點。

+0

我很想得到更詳細的答案,但我會接受它,因爲它似乎回答了這個問題,並沒有出現反對意見。總結:這是一個壞主意。謝謝。 –

5

這樣設置的原因是爲了保持與以前沒有命名空間的版本的向後兼容性。這允許開發人員在添加新版本時升級到最新版本,而無需重構所有代碼。

1

其實這取決於。如果你正在使用多個JS庫,你可能會避免命名空間到窗口來招待所有庫。

但是,如果您爲遊戲/應用程序使用單個庫(CreateJS),則可以考慮使用Namespace to Window來節省大量時間,這些時間將反覆用於編寫自定義名稱空間名稱。使用CreateJS構建遊戲時,我發現它非常方便。