Dans certains cas, le mot-clé this
devrait fonctionner correctement. Si vous appelez explicitement myNameSpace.mySecondFunction()
alors this.myFirstFunction()
s'exécutera comme prévu.
Si vous utilisez myNameSpace.mySecondFunction
en tant que gestionnaire d'événements, ce n'est probablement pas le cas. Dans le cas d'un gestionnaire d'événements, vous devez vous référer à l'espace de noms que vous voulez utiliser. De nombreux frameworks JavaScript permettent de définir ce à quoi le mot clé this
fait référence. Par exemple, dans MooTools vous pouvez faire myNameSpace.mySecondFunction.bind(myNameSpace)
ce qui entraînera this
à se référer à myNameSpace
à . Si vous n'utilisez pas un cadre, vous pouvez rendre votre gestionnaire d'événements une fonction anonyme comme:
document.getElementById('myId').addEventListener('click', function(e) {
myNameSpace.mySecondFunction.call(myNameSpace);
});
Pour plus d'informations sur la méthode d'appel, je me réfère à la MDC page for the call function ou vous pouvez utiliser apply qui se comporte de façon similaire à appeler, mais en passant un tableau d'arguments pour le second paramètre plutôt que d'avoir une approche similaire à celle de varargs pour les paramètres supplémentaires.
Toutes ces suggestions sont fondées sur la définition de votre espace de noms comme @Harnish suggested:
var myNameSpace = {
myFirstFunction: function(){
alert("Hello World!");
},
mySecondFunction: function(){
this.myFirstFunction();
}
}
Pour plus d'informations sur la fonction JavaScript liant Je suggère fortement la lecture Justin's article on Function scope and binding in JavaScript
Votre exemple est correcte, il devrait fonctionner. –