2015-10-27 1 views
0

J'ai une fonction prête (e) qui contient à l'intérieur une toile et une autre fonction. Je veux faire une action en dehors du canevas pour appeler une fonction à l'intérieur de ready (e). Comment puis je faire ça? Merci beaucoup!!comment appeler la fonction qui est dans une fonction prête()?

Voici une version simplifiée de mon code .. Je veux appeler arraytwo() hors fonction prêt (e) ...

function ready(e) 
{ 
    var canvas; 
    var canvasWidth; 
    var canvasHeight; 
    var ctx; 
    canvas = document.getElementById('myCanvas'); 
    canvasWidth = 1100 ; 
    canvasHeight = 1200; 
    ctx = canvas.getContext('2d'); 
    function arraytwo() 
    {alert("arraytwo");} 
} 
arraytwo(); 

EDIT: Désolé je devrais préciser, la fonction/information/les données que j'utilise dans arraytwo devront être utilisées dans la toile. alert() est juste un exemple. donc je ne peux pas le mettre dehors (e).

EDIT2: il y a une ligne de code avant la fonction prête (e). Espérons que cette information est utile :(

this.addEventListener("DOMContentLoaded", ready, true); 

EDIT3: ce qui est le code de la toile en html

<canvas id="myCanvas"></canvas> 
+1

Vous devez déclarer arraytwo() dans l'espace de noms public. En le plaçant à l'intérieur de la fonction ready() il n'existe que dans la portée de ready() – PC3TJ

+0

Merci comment déclarer arraytwo() dans un espace de noms public?(désolé débutant en javascript) – user5492444

+0

Juste veut dire un nest en dehors de ready() { – PC3TJ

Répondre

1

dans ce cas la fonction « arraytwo » est une fonction privée, vous pouvez l'appeler en retournant ou en utilisant Closure modèle

function ready(e) 
    { 
     var canvas; 
     var ctx; 
     // canvas = document.getElementById('myCanvas'); 
     // ctx = canvas.getContext('2d'); 
     return { 
       arraytwo:function(){ 
        alert("arraytwo"); 
       } 
      } 
    } 

v = ready() // call your outer function 
v.arraytwo()// call your closures function 
+0

merci. mais quand je fais que la toile est partie ... :( – user5492444

+0

s'il vous plaît ajouter le code de toile (html, js) dans votre question afin que je puisse vérifier –

+0

Merci d'avoir ajouté un peu plus de code.S'il vous plaît utile! – user5492444

0

Pourquoi ne bougent pas simplement votre fonction en dehors du champ d'application ready

?
function ready(e) 
{ 
    var canvas; 
    var ctx; 
    canvas = document.getElementById('myCanvas'); 
    ctx = canvas.getContext('2d'); 
} 

function arraytwo(){ 
    alert("arraytwo"); 
} 

arraytwo(); 
+0

Désolé je devrais avoir clarifier, la fonction/information/données que j'utilise dans arraytwo devra être utilisé dans la toile. alert() est juste un exemple. donc je ne peux pas le mettre dehors (e). – user5492444

+0

Dans ce cas, la solution @Shailendra Sharma a la bonne solution. – Antoine

-1

Vous devez déclarer arraytwo() dans l'espace de noms public. En le plaçant dans la fonction ready() il n'existe que dans la portée de ready() Il n'y a pas de raison de déclarer une fonction dans une fonction à moins qu'elle ne soit utilisée seulement dans le contexte et la portée de la fonction parent. Comme si vous aviez deux fonctions avec une méthode du même nom qui étaient différentes et que vous vouliez qu'elles accèdent aux variables dans le cadre de la fonction parent, vous les imbriqueriez. Dans ce cas, l'imbrication n'est pas la bonne façon de procéder.

var canvas; 
 
var ctx; 
 

 

 
    function ready(e) 
 
    { 
 

 
     canvas = document.getElementById('myCanvas'); 
 
     ctx = canvas.getContext('2d'); 
 

 
    } 
 

 
    function arraytwo() 
 
    { 
 
     alert("arraytwo"); 
 
     return arrayTwoData; 
 
    } 
 

 
    var arrayTwoData=arraytwo();

voudrais également souligner qu'il est préférable d'utiliser des window.onload = function() {arrayTwo();};

+0

Désolé je devrais avoir clarifier, la fonction/information/données que j'utilise dans arraytwo devra être utilisée dans la toile. alert() est juste un exemple. donc je ne peux pas le mettre dehors (e). – user5492444

+0

Vous pouvez lui transmettre des arguments, lui renvoyer des données ou simplement déclarer les variables nécessaires dans l'espace de noms public. – PC3TJ

+0

J'ai modifié le code ci-dessus pour montrer que vous pouvez rendre les données dont vous avez besoin accessibles globalement. Ce n'est pas la meilleure approche, mais sans voir votre code et votre flux de données, c'est le meilleur que je puisse vous recommander. – PC3TJ

0

function ready(e) 
 
{ 
 
    var canvas; 
 
    var ctx; 
 
    canvas = document.getElementById('myCanvas'); 
 
    ctx = canvas.getContext('2d'); 
 
    function arraytwo() 
 
    { 
 
     alert("arraytwo"); 
 
    } 
 
    ready.arraytwo=arraytwo; 
 
} 
 
ready.arraytwo();

Alors que je l'ai dit au-dessus des raisons pour lesquelles vous ne devrait pas faire cela. Vous pouvez construire votre objet de prêt en ajoutant arraytwo comme un enfant en ajoutant

ready.arraytwo=arraytwo; 

qui fera cette vissible à la portée mondiale.

+0

cela ne fonctionne pas: (( – user5492444

+0

Désolé appeler la fonction par ready.arraytwo() – PC3TJ