2016-06-10 1 views
-1

J'ai deux fichiers comme ci-dessous:Comment appeler une fonction qui se trouve dans une autre fonction 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> 

Comment puis-je appeler cette fonction. J'ai essayé de créer un objet à droite avant d'appeler drawaggregation(), comme ci-dessus:

Je reçois toujours l'erreur:

TypeError:try_obj.drawaggregate is not a function

En outre, dans index.html je me suis assuré que je trycapture.js avant principale inclus. js Comment puis-je appeler cette fonction?

+0

Pouvez-vous poster la code complet? – 2426021684

+1

Pouvez-vous inclure du code pour la configuration de vos fonctions? – ssube

+2

sans voir votre code source, il n'y a aucun moyen d'aider à résoudre votre problème. Veuillez consulter [ask] et inclure un [mcve]. Sinon, cette question est [hors sujet (# 1)] (/ help/on-topic) et devrait être fermée en tant que telle. – zzzzBov

Répondre

1

Ajouter

this.drawaggregate = drawaggregate; 

après votre définition de fonction pour en faire une méthode publique de l'objet trycapture.


Dans l'ensemble, vous allez changer vos trycapture.js à ce qui suit:

function trycapture(){ 
    ... some code 

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

la méthode drawaggregate() peut alors être appelé comme ceci:

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

Je suis capable d'appeler la fonction même sans l'objet maintenant. Est-ce normal? – Arihant

+0

Oui, c'est normal. Cela dépend de beaucoup de choses et de plus que ce qui peut tenir dans cette boîte de commentaires. Donc, expliquer ici pourrait être incomplet et déroutant. EXEMPLE1: Si vous appelez votre 'new trycapture()' depuis une fonction anonyme telle qu'un écouteur d'événement 'onload', alors' this' à l'intérieur de 'trycapture' se référera à l'objet' window' à la place. Ainsi, 'drawaggregate' deviendrait une fonction globale de fenêtre appelable de n'importe où. EXEMPLE2: Si vous êtes dans l'espace de noms de la fonction 'trycapture', vous êtes autorisé (et devez) appeler' drawaggregate' comme une fonction locale au lieu d'une méthode d'un objet. – FactoryAidan