2010-08-17 4 views
11

Ich muss bestimmte js Funktion aufrufen. Das Problem ist, dass viele Zeit Laufzeitsituation kommen kann, wo eine andere js-Datei die gleiche Funktion enthalten kann. Aber ich muss genau festlegen, welche Funktion ich nennen soll. Funktion Überladung ist nicht meine Lösung.rufen Sie eine bestimmte JavaScript-Funktion, wenn mehrere gleiche Namen Funktion im Speicher sind

Danke und Gruß, Tanmay

+0

möglich Duplikat [verwenden zwei gleichen Namen trägt Methode in verschiedenen .js-Dateien] (http://stackoverflow.com/questions/3492636/use-two-same-name-method-in-different-js-files) –

+0

Was meinst du mit "Funktionsüberladung"? Funktionsklonen? –

Antwort

2

Mindestens in Firefox, wenn Sie zwei Funktionen mit dem gleichen Namen haben, wird der zweite die erste überschrieben.

So können Sie nicht die erste anrufen.

Versuchen Sie es:

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

in jsfiddle See.

+0

Nicht nur in Firefox; in * jeder * Javascript-Engine von * jedem * Browser. Sie können dies nicht einmal bedingt tun, da das Ergebnis unvorhersehbar sein wird. Z. B. siehe [dieser Code] (http://jsbin.com/iwifi3/edit): In mehreren Browsern (zumindest in Chrome und Opera) wird die erste Funktionsdeklaration unabhängig von der Bedingung immer von der zweiten überschrieben. –

+0

gibt es eine Möglichkeit, die zweite Funktion die erste Funktion aufrufen zu lassen? –

1

In Javascript überschreiben ähnlich benannte Funktionen automatisch die vorherige Funktion, die mit dem exakt gleichen Namen definiert wurde.

Nehmen wir an, Ihre Seite enthält 1.js und 2.js und beide definieren die gleiche Funktion, zum Beispiel display(). In diesem Fall überschreibt die Definition von 'display()' in dieser Datei, basierend auf welcher js-Datei die letzte enthalten ist, alle anderen vorherigen Definitionen.

10

Sie müssen einige Reorganisation Ihrer Ressourcen zu tun und verwenden Namespacing, wo Sie können.

Wenn Sie eine Methode mit dem Namen saySomething zweimal definiert haben, würden Sie eine davon in ein Objekt verschieben (je nachdem, welches besser Ihren Anforderungen entspricht).

var myNS = new (function() { 

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

})(); 

und die andere Definition kann in ein anderes Objekt verschoben oder auch alleine gelassen werden.

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

Sie können nun die saySomething Methode wie

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

bearbeiten nennen: da es dies dem ersten Codeblock

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

entspricht in den Kommentaren nach oben gebracht wurde, in einfacher Form (wenn ich mich richtig erinnere).

+0

+1 für einige Optionen –

+0

Gute Antwort, aber warum verwenden Sie nicht [Objekt literal Notation] (http://www.wait-till-i.com/2006/02/16/show-love-to- das-Objekt-Literal /)? –

+0

@Marcel Korpel Gewohnheit ich denke. In der Regel, wenn ich ein Objekt erstelle, gibt es "private" Variablen, die nicht mit literaler Notation verfügbar sind (oder ich weiß nicht, wie ich das machen soll). – lincolnk

1

I Funktionsumfang nutzen den Umfang von Variablen und Funktionen

Hier zu begrenzen, ist ein Beispiel:

// 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 

Ich hoffe, dass :)

+0

Das behebt mein Problem, wo meine .js-Dateien über eine "include" -Anweisung eingefügt werden und daher der Funktionsname nicht geändert werden konnte. – Pierrick

Verwandte Themen