2010-06-04 12 views
4

我有兩個外部JavaScript庫文件,我必須加載在相同的JSP頁面上。它們都有一個名爲「autoSave()」的函數,它們都沒有參數。我不能修改他們的簽名,因爲他們不是我的腳本文件。如果函數來自外部JavaScript庫,如何處理JavaScript中衝突的函數名稱?

如何明確地在腳本A或腳本B中調用函數?優先順序是如何決定的?

+0

我發現可以用來產生兩個目標相互衝突的功能名稱列表的功能。 http://stackoverflow.com/a/15330156/975097 – 2013-03-11 02:11:26

回答

12

由第二個腳本定義的函數將覆蓋由第一個腳本定義的函數。

您可以保存從一個腳本功能的副本,包括腳本B.

例如前:

<script type="text/javascript" src="Script A"></script> 
<script type="text/javascript"> 
    var autoSave_A = autoSave; 
</script> 

<script type="text/javascript" src="Script B"></script> 
<script type="text/javascript"> 
    var autoSave_B = autoSave; 
</script> 

注意,順便說一句,如果腳本A調用autoSave按名稱腳本會調用錯誤的autoSave並(可能)停止工作。
在使用包裝器方法從任一腳本調用函數之前,可以通過交換autoSave函數來解決該問題。

+0

聽起來不錯!謝謝! – 2010-06-05 23:42:40

0

相同函數名稱的第二個函數聲明會覆蓋較早的函數聲明,所以它將取決於您的腳本包含的順序。

1

那麼,IMO的圖書館應該是命名空間,所以你可以很容易地致電lib1.autoSave()lib2.autoSave(arg)

目標是儘可能使用few global variables

給看看下面的文章:

+0

是的,但他無法修改腳本。 – SLaks 2010-06-04 16:03:08

+1

@SLaks,沒有注意到...它將在任何時候真正混亂:(...... – CMS 2010-06-04 16:17:46