2009-04-21 4 views
2

In einer Funktion gibt es eine Möglichkeit, einen Verweis auf das Objekt zu erhalten, das es aufgerufen hat? Ich habe die gleiche Instanz eines Flash-Objekts auf der Seite zweimal, jeder kann über ExternalInterface Aufrufe an JS machen, ich kann die Flash-Objekte nicht codieren, um jeweils eine andere ID zu übergeben, da es sich um 2 Instanzen desselben Flash-Objekts handelt eine Möglichkeit für JS, einen Verweis darauf zu bekommen, welche die Funktion aufgerufen hat?JS: Gibt es eine Möglichkeit zu sagen, welches Objekt eine Funktion genannt wird?

Danke!

Antwort

3

Können Sie nicht eine ID an das Flash-Objekt, wenn Sie es instanziiert? (über eine Abfragezeichenfolge oder params). Dann könnten Sie diese ID in Ihren JavaScript-Funktionsaufrufen verwenden.

+0

Das ist eine gute Idee. –

+0

Lass es mich wissen, wenn es funktioniert. Ich habe nur ein kleines bisschen Flash gemacht. –

0

arguments.caller oder Function.caller aber Sie möchten vielleicht sehen, um Ihren Code neu zu organisieren, um sie zu vermeiden. Es gibt wirklich einen anderen Weg, um zu bekommen, was Sie wollen - ich garantiere es.

Bearbeiten: AnthonyWJones wies darauf hin, dass Sie tatsächlich nach dem Operator this suchen.

Die Diese Schlüsselwort bezieht sich auf den Kontext Objekt (a.k.a. aktuelle Objekt). In allgemein, in einer Methode, dies bezieht sich auf das aufrufende Objekt.

+0

Verweist der Aufrufer nicht auf die Funktion, die die aktuelle Funktion aufgerufen hat, die sich von dem Objekt unterscheidet, das die Funktion aufgerufen hat? – AnthonyWJones

+0

Guter Punkt. Das Objekt, das die Funktion aufgerufen hat, ist "dies". –

2

Ich weiß nicht über ExternalInterface, aber haben Sie versucht, das this Objekt während der Ausführung Ihrer Funktion zu untersuchen?

Natürlich könnte man immer einen Verschluss verwenden. Letztlich müssen Sie dem Flash-Objekt eine auszuführende Funktion geben. Zum Beispiel habe ich myObj1 und myObj2, die eine Rückrufmethode fnCallback nehmen, aber aus irgendeinem Grund nicht den this Kontext bei der Ausführung dieser Funktionen für sich selbst festlegen. Daher kann ich dies tun: -

function setCallback(obj, fn) 
{ 
    obj.callback = function() {fn.apply(obj, arguments);} 
} 

setCallback(myObj1, fnCallback); 
setCallback(myObj2, fnCallback); 

Jetzt kann ich fnCallback Code this als Verweis auf das spezifische Objekt verwendet, das die Funktion aufruft.

+0

Ich bin mir nicht ganz sicher, was du meinst, kannst du bitte ein wenig mehr ausarbeiten? Willst du damit sagen, dass "das" in der JS-Funktion auf das Flash-Objekt verweist, das die Funktion aufgerufen hat? Vielen Dank. –

+0

Jedes Objekt kann für eine Funktionsausführung als 'dieser' Kontext bereitgestellt werden, ich bin mir nicht sicher, dass dies in diesem Fall zutrifft, da ich keine direkte Erfahrung mit ExternalInterface habe, mein Vorschlag ist, dass Sie es einfach ausprobieren. – AnthonyWJones

0

Wenn Sie nach einer Möglichkeit suchen, ein Nichtfunktionselement zu finden, das eine Funktion aufruft, sollten Sie das Ereignis in Betracht ziehen. Dies ist eine ziemlich praktische Funktion, die ich oft nutze, wenn ich ein Ereignisobjekt übergebe.

function getTargetElement(evt) { 
    evt = (evt) ? evt : ((window.event) ? window.event : ""); 
    var elem; 
    if (evt.target) { 
     elem = (evt.target.nodeType == 3) ? evt.target.parentNode : evt.target; 
    } else { 
     elem = evt.srcElement; 
    } 
    return elem; 
} 

So, zum Beispiel, wenn Sie eine Funktion "find (event);" von einem klickten Elemente kann finden codiert werden, um diese Methode zu verwenden, das Ereignisobjekt zu erhalten:

function find(evt){ 
    var clickedObj = getTargetElement(evt); 
    alert(clickedObj.tagName); //alerts "TD" 
} 
Verwandte Themen