2016-06-10 21 views
-1

Ich habe zwei Dateien wie folgt:Wie eine Funktion aufzurufen, die in einer anderen Funktion ist Javascript

trycapture.js (which has) trycapture() (which has) drawaggregate() definition 
main.js from which I want to call drawaggregate(); 

trycapture.js

trycapture(){ 
... some code 
function drawaggregate(){ 
... definition 
    } 
} 

main.js

.. some variables 
var try_obj = new trycapture(); 
try_obj.drawAggregate(emit_x1,emit_y1,emit_x2,emit_y2); 

HTML

<head> 
<script src="trycapture.js"></script> 
<script src="js/main.js"></script> 
</head> 

Wie kann ich diese Funktion aufrufen. Ich habe versucht, die Schaffung eines Objekts direkt vor drawaggregation() aufrufen, wie oben:

ich immer noch den Fehler:

TypeError:try_obj.drawaggregate is not a function

, auch in index.html Ich stellte sicher, dass ich trycapture.js vor Haupt enthalten. js Wie kann ich diese Funktion aufrufen?

+0

Können Sie nach der vollständiger Code? – 2426021684

+1

Können Sie einen tatsächlichen Code für die Einrichtung Ihrer Funktionen hinzufügen? – ssube

+2

Ohne Ihren Quellcode zu sehen, gibt es keine Möglichkeit, Ihr Problem zu lösen. Bitte lesen Sie [ask] und fügen Sie einen [mcve] hinzu. Ansonsten ist diese Frage [off-topic (# 1)] (/ help/on-topic) und sollte als solche geschlossen werden. – zzzzBov

Antwort

1

hinzufügen

this.drawaggregate = drawaggregate; 

nach Funktionsdefinition es eine öffentliche Methode des trycapture Objekt zu machen.


Insgesamt werden Sie Ihre trycapture.js wie folgt ändern:

function trycapture(){ 
    ... some code 

    // Locally accessible only 
    function drawaggregate(){ 
     ... definition 
    } 
    this.drawaggregate = drawaggregate; // Makes it publicly accessible also 
} 

die drawaggregate() Verfahren kann dann wie so aufgerufen werden:

var try_obj = new trycapture(); 
try_obj.drawaggregate(); 
+0

Ich bin in der Lage, die Funktion auch ohne das Objekt jetzt aufzurufen. Ist das normal? – Arihant

+0

Ja, das ist normal. Es hängt von vielen Dingen und mehr ab, als in dieses Kommentarfeld passen kann. Die Erklärung hier könnte unvollständig und verwirrend sein. BEISPIEL 1: Wenn Sie Ihre 'new trycapture()' aus einer anonymen Funktion wie einem 'onload'-Event-Listener aufrufen, verweist' this 'innerhalb von' trycapture 'stattdessen auf das 'window'-Objekt. So würde 'drawaggregate' zu ​​einer globalen Fensterfunktion, die von überall aufgerufen werden kann. BEISPIEL 2: Wenn Sie sich im Namespace 'trycapture' befinden, dürfen Sie' drawaggregate' als lokale Funktion aufrufen (und sollten dies auch tun), anstatt eine Methode eines Objekts. – FactoryAidan