2010-08-17 63 views
11

我需要調用特定的js函數。問題是很多時候運行時情況可能會出現在另一個js文件可能包含相同名稱函數的地方。但我需要明確哪些功能是我應該調用的。 函數重載不是我的解決方案。當多個同名函數在內存中調用特定的javascript函數

感謝和問候, Tanmay

+0

可能重複方法在不同的.js文件](http://stackoverflow.com/questions/3492636/use-two-same-name-method-in-different-js-files) – 2010-08-17 13:31:11

+0

你是什麼意思的「功能重載」?函數克隆? – 2010-08-17 16:33:25

回答

2

至少在Firefox中,當你有兩個名稱相同的功能,第二個將覆蓋第一個。

所以,你不能打電話給第一個。

試試:

function a() {alert(1);} 
function a() {alert(2);} 
a(); // alerts '2' 

jsfiddle

+0

不僅在Firefox中; *每個*瀏覽器的*每個*引擎。你甚至不能有條件地做這件事,因爲結果是不可預測的。例如,請參閱[本代碼](http://jsbin.com/iwifi3/edit):在多個瀏覽器中(至少在Chrome和Opera中),無論條件如何,第一個函數聲明總是被第二個覆蓋。 – 2010-08-17 13:37:09

+0

有什麼辦法讓第二個函數調用第一個函數? – 2017-04-20 11:52:48

1

在JavaScript中,類似命名的函數會自動覆蓋以完全相同的名稱定義的以前的函數。假設你的頁面包含1.js和2.js,並且它們都定義了相同的功能,例如display()。在這種情況下,在最後包含js文件的基礎上,該文件中'display()'的定義將覆蓋所有其他先前的定義。

10

您將不得不對一些資源進行重組,並在可能的地方使用命名空間。

如果你有一個名爲saySomething的方法定義了兩次,你可以將其中的一個移動到一個對象中(以適合你的需求爲準)。

var myNS = new (function() { 

    this.saySomething = function() { 
     alert('hello!'); 
    }; 

})(); 

另一個定義可以移動到一個不同的對象,或者甚至留下。

function saySomething() { 
    alert('derp!'); 
} 

現在就可以調用saySomething方法類似

saySomething();  // derp! 
myNS.saySomething(); // hello! 

編輯:因爲它是在意見提出來了,這

var myNS = { 
    saySomething: function() { 
     alert('hello!'); 
    } 
}; 

相當於第一個代碼塊中,更簡單形式(如果我記得正確)。

+0

+1給出一些選項 – 2010-08-17 13:37:55

+0

好的答案,但你爲什麼不使用[對象文字符號](http://www.wait-till-i.com/2006/02/16/show-love-to-的對象字面/)? – 2010-08-17 13:41:47

+0

@Marcel Korpel習慣我猜。通常當我創建一個對象時,會出現「私有」變量,這些變量在文字表示法中不可用(或者我不知道如何去做)。 – lincolnk 2010-08-17 13:57:28

1

我使用功能範圍,以限制變量和函數

這裏的範圍是一個例子:

// existing function in JavaScript 
function one() { 

console.log('one'); 
} 

one(); // outputs one 

// inserting new JavaScript 
(function() { // anonymous function wrapper 
'use strict'; // ECMAScript-5 

    function one() { 

    console.log('two'); 
    } 


    one(); // outputs two 

})(); // end of anonymous function 

one(); // outputs one 

我希望幫助的[使用兩個相同的名稱 :)

+0

這解決了我的問題,通過「include」語句插入我的.js文件,因此無法更改函數名稱。 – Pierrick 2015-03-30 13:24:57