11491 sujets

JavaScript, DOM et API Web HTML5

Bonjour
Dans l’idée d’ordonner un code qui s’annonce volumineux, j’essaie de créer une bibliothèque. Et je voudrais organiser les méthodes sur au moins deux niveaux. Dans l’exemple de mon code, je veux pouvoir appeler malib.test.hello().
J’ai essayé toutes sortes de chose, voici ce qui me semble le plus proche de ce que je cherche :
var malib = (function(){
    var hello = function(name='World'){
        return "Hello " + name + " !!!" ;
    }
    var test = (function(){
        var hello = function(name='Word'){
            return "Hello " + name + " !!!" ;
        }
        return {
            hello:hello,
        };
    })();
    return {
        hello:hello,
        test:test.hello,
    }    
})();

Et pour l’appeler :
    <script>
        console.log(malib.hello())    
        console.log(malib.test.hello())    
    </script>

La première instruction fonctionne bien, mais la seconde, qui est ce que je cherche, ne veut rien comprendre.
Des idées ? Merci d’avance.
salut,
ça dépend un peu de ce que tu veux faire.
Si tu souhaites avoir une organisation type "bibliothèque", tu dois sans doute t'orienter vers de la POO.
Mais là, j'ai plus l'impression que tu cherches juste à organiser tes fonctions.
Je ne comprends pas trop pourquoi tu fais si compliqué, car ton code revient à écrire (après correction) :

var malib = {
        hello: function(name="World"){
            return "Hello " + name + " !!!" ;
        },
        test: {
            hello: function(name="World"){
                return "Hello " + name + " !!!" ;
            }
        }
    };

Ton erreur est dû au fait que tu retournes test:test.hello là où tu devrais simplement retourné test:test

var malib = (function(){
    var hello = function(name='World'){
        return "Hello " + name + " !!!" ;
    }
    var test = (function(){
        var hello = function(name='Word'){
            return "Hello " + name + " !!!" ;
        }
        return {
            hello:hello,
        };
    })();
    return {
        hello:hello,
        test:test,
    }    
})();
Meilleure solution
Bonjour
Effectivement, la solution toute simple, je l'avais sous le nez, et je ne faisais que tourner autour.
Merci beaucoup.