我有一個非常大的Javascript腳本,其中包含全局變量負載&函數。然後從這個js文件中調用一個函數的一段代碼:myfunc();好吧,現在我已經克隆了這個腳本並修改了一些功能,所有的函數原型和變量在兩個腳本中都被命名爲相同。所以現在我有兩個腳本加載和一個調用myfunc(),現在我們有一個衝突,因爲有大量的全局變量具有相同的名稱和兩個myfunc()。Javascript名字空間幫助
我想要做的就是將這個克隆的腳本包裝在命名空間中,以便我可以將原始調用修改爲:clone.myfunc(),它將調用新函數,但我也希望myfunc()到原來的腳本。換句話說,我無法觸及原始腳本(無權限),我希望能夠在運行時使用克隆和原始文件。
這是腳本IM克隆:http://pastebin.com/6KR5T3Ah
的Javascript命名空間顯得相當棘手這似乎是一個很好的命名方法:
var namespace = {
foo: function() {
}
bar: function() {
}
}
...
namespace.foo();
}
然而,需要使用一個對象,並且腳本(如上面貼)在近4000條線路上是巨大的,我認爲太過於客觀化了?
任何人都知道一個更好的解決方案,以避免命名空間污染,一個腳本我不能碰,一個是該腳本的克隆。所以我可以調用myfunc()和clone.myfunc(),並且所有全局變量都將在其受尊重的範圍內運行。
它要麼,我經過和修改一切有唯一的名字,這可能需要一輩子
這是一個Mozilla插件如果有幫助的上下文明智的。
謝謝。
我認爲如果是「Mozilla插件」,「窗口」可能不起作用,但我認爲將「this」傳遞給包裝函數也適用於該上下文。我當然可能會錯,因爲我從來沒有做過插件。 – Pointy 2010-05-31 21:26:37
非常感謝。如果我採用上面的方法1,當匿名函數在聲明後立即被調用時會發生什麼?只是我不需要任何東西(功能明智)執行,直到我明確地調用myfunc()在代碼庫中的其他地方。 另外,使用方法1,我是否認爲我可以在該命名空間/匿名函數中包含儘可能多的函數和變量,然後只需要導出任何我需要公開的函數? – Jason 2010-05-31 21:31:07
@Jason:立即執行匿名函數基本上與沒有函數包裝器一樣 - 變量被創建,函數被創建,但是除非被調用,否則不會調用函數。:-)是的,你可以在其中包含儘可能多的功能。 JavaScript庫經常使用這種習慣用法,因此它們可以擁有許多私有的內部函數,並且只導出真正需要的內部函數。 – 2010-05-31 21:36:36