Fonction d'appel à l'intérieur d'une fonction dans le module jjjj requiert

Salut les gars est ce posibble? Appeler une fonction à l'intérieur d'une fonction dans un module requirejs? TIA

define([ 'common' ], function(Common) { return { func1: function() { return 'this is function 1'; }, func2 : function (data){ console.log(func1); } }; }); 

Votre code tel qu'indiqué ne fonctionnera pas. Je suggère de le transformer en quelque chose comme ceci:

 define([ 'common' ], function(Common) { var exports = {}; var func1 = exports.func1 = function() { return 'this is function 1'; }; var func2 = exports.func2 = function (data){ console.log(func1); }; // A function that is not exported but can be accessed from other code in this module. var privateFunc = function() { }; return exports; }); 

Personnellement, je pense que ce style de code est propre et flexible. Il est clair quelles fonctions sont exportées et elles peuvent se référencer en utilisant des noms de variables locales simples.

Faisons un module requireJs dans sa partie pour comprendre ce qui se passe:

On doit savoir que c'est un module

 define( 

Certaines dépendances

 [ 'common'], 

C'est donc la partie principale. Après tout cela, c'est une fonction appelée quand elle est chargée. RequireJs enregistre le résultat de la fonction et l'injecte dans chaque module qui possède ce module en tant que dépendances

 function(Common) { return 

C'est donc ce que chaque module reçoit quand il nécessite ce module

 { func1: function() { return 'this is function 1'; }, func2 : function (data){ console.log(func1); } }; 

Donc, dans votre cas, vous ne retournez qu'un simple objet avec 2 fonctions en tant que membre.

Ce que vous essayez de faire, ne peut pas fonctionner, car il n'y a pas de func dans la portée, aka la fonction qui renvoie l'objet. Mais il y a un membre func dans votre objet, afin que vous puissiez appeler this.func1 .

Vous pouvez également avoir une fonction dans votre fonction comme ceci:

 define([ 'common' ], function(Common) { function func1() { return 'this is function 1'; } return { func2 : function (data){ console.log(func1); } }; }); 

Mais alors func1 n'est pas accessible depuis l'extérieur

Inspiré de la réponse d'Andreas Köberle, j'ai trouvé ce travail, mais je suis presque sûr qu'il y ait une meilleure façon de le faire …

 define(function(require) { function func1() { return 'this is function 1'; } return { func1: function() { return func1(); }, func2 : function (data){ console.log(func1); } }; }); 

De cette façon, nous pouvons accéder à l'intérieur et à l'extérieur de la méthode func1. Pour moi, ça marche très bien. Merci.

Le follwing fonctionnerait …

 console.log(this.func1()); 

Vous n'avez pas spécifié correctement la poignée, vous devez l'utiliser pour spécifier le handle func1. Et je pense que vous étiez sur le point d'appeler func1() pour imprimer 'this is function 1' pas seulement faire func1 sans paranthesis, car il pourrait imprimer la définition de la fonction.