2014-04-08 55 views
-1

我有兩個seprate .js文件,即abc.js和xyz.js,在這兩個JS文件我有一個方法,如:在JavaScript中調用函數(在具有相同名稱和參數的不同文件中)?

abc.js

function OpenPopup(url){ 
//Code 
} 

xyz.js

function OpenPopup(url){ 
// some different implementation 
} 

然後我就inculde一個HTML頁面就像這兩個文件:

<html> 
<head> 
<script src="abc.js" id="file1"> </script> 
<script src="xyz.js" id="file2"> </script> 
</head> 

<body> 
<button onclick="OpenPopup(url)">Try it</button> 
</body> 
</html> 

當我試圖打開功能上的一些事件說的onclick任何按鈕(如上),然後,

1)哪種方法哪些文件被調用即abc.js的OpenPopup或XYZ的OpenPopup .js在這兩個文件中的函數名和它的參數是一樣的嗎?

2)如果說,叫OpenPopup的abc.js。那麼我怎麼明確地調用xyz.js文件的OpenPopup函數呢?

+0

使用''script src =「abc.js」id =「file1」/>'就像將代碼放置在'abc.js'這裏。您不能使用文件名稱從該文件調用任何函數。 –

回答

2

我工作前相同的兩週內,結果是最後一個加載的功能將覆蓋別人,可以」由於腳本沒有同步加載,所以實際上可以預測一個人會覆蓋另一個,但在完美的情況下,最後一個腳本中包含的最後一個函數將被覆蓋。

現在關於下列文件名加載功能,我已經嘗試了「命名空間」的技巧,我已經成功地使這樣的事情:

腳本abc.js

var abc = function(){ 
return { 
    OpenPopup : function(){ 
     //Code goes here 
    } 
} 
} 

腳本XYZ .js文件

var xyz = function(){ 
return { 
    OpenPopup : function(){ 
     //Code goes here 
    } 
} 

}

您可以撥打OpenPopup像THI s:

abc().OpenPopup(); 
xyz().OpenPopup(); 
+0

感謝您的回答Tarek,我也嘗試做同樣的事情,你說得對,因爲加載的JavaScript文件不是同步的,所以無論哪個文件最後加載都會覆蓋該函數。 –

+0

關於#2查詢,可以通過函數文字來實現。 –

1
  1. 通常最後一個被定義的將是被調用的那個。在這種情況下,由於您的<script>元素沒有結束標記,因此根本不會解析第二個腳本。

  2. 你不行。通過定義一個與現有函數具有相同名稱的新函數,在與該函數相同的範圍內,您已覆蓋該函數並進行垃圾收集。

+0

我已更正關閉腳本標記。如果說這兩個文件被解析,那麼會發生什麼? –

+0

然後,正如我所說,你定義的最後一個將覆蓋第一個,這將是將被調用的那個。 – Quentin

+0

好的,謝謝昆汀,這個答案是我的第一個問題。關於第二個查詢,我認爲可以通過函數文字來實現。 –

1

U可以試試這個(未測試):

abc.js:

(function(window, document){ 
    function OpenPopup(url){ 
    //Code 
    } 
    window.abc = {}; 
    window.abc.OpenPopup = OpenPopup; 
})(window, document); 

xyz.js:

(function(window, document){ 
    function OpenPopup(url){ 
    //Code 
    } 
    window.xyz = {}; 
    window.xyz.OpenPopup = OpenPopup; 
})(window, document); 

HTML

<button onclick="abc.OpenPopup(url)">Try abc.js</button> 
<button onclick="xyz.OpenPopup(url)">Try xyz.js</button> 
+0

感謝您的回覆,這是一般查詢。我剛剛命名了OpenPopup函數。我的實際查詢是在這種情況下究竟會發生什麼? –

0

首先,你必須關閉你的標籤,因爲這裏不起作用。其次,你只是在相同的範圍內覆蓋你的方法。 最後,你的代碼也會通過錯誤,因爲在函數調用中你還沒有定義'url',所以錯誤會引發URL未定義。

正確的代碼如下: 試試吧

+0

這是一般查詢,我只是介紹了一種情況,在這種情況下會發生什麼?我希望你能明白我的觀點。 –

相關問題