Partage
  • Partager sur Facebook
  • Partager sur Twitter

Activité 2 : Méthode init n'est pas une fonction

TypeError: creationContact.initContact is not a function

Sujet résolu
    10 janvier 2018 à 23:40:20

    Bonjour, je vous contacte car cela fais plus de 4 heure maintenant que je cherche en vain une solution à mon problème .

    Lors de l'ajout d'un contact à la ligne 43 mon programme me retourne cette erreur : "TypeError: creationContact.initContact is not a function"
    Bon je ne comprends pas pourquoi il m'affiche cette erreur . Pouvez vous m'aider svp ? 
    Le code : 
    var repertoirContact = {
        //Initialisation de contact
        initContact: function(prenom,nom){
            this.prenom = prenom;
            this.nom = nom;
        },
        descriptionContact: function(){
            var description = "Prenom : "+this.prenom+"\nNom :"+this.nom;
            return description;
        }
    };
    
    //*** Initialisation des deux contact de base **** //
    var Contact1 = Object.create(repertoirContact);
    Contact1.initContact("Carole","Lévisse");
    var Contact2 = Object.create(repertoirContact);
    Contact2.initContact("Mélodie ","Nelsonne");
    
    //Creation d'un tableau répertoire de contact
    var repertoirContact = [];
    repertoirContact.push(Contact1);
    repertoirContact.push(Contact2);
    
    
    //*** MENU **** //
    console.log("Bienvenue dans le gestionnaire des contacts !");
    var i=1;// variable pour la vérification de l'ajout d'un contact
    do{
        var choix=-1;
        console.log("1 : Lister les contacts\n2 : Ajouter des contacts\n0 : Quitter");
        choix = Number(prompt("votre choix : "));
        if(choix===1){
                repertoirContact.forEach(function(repertoirContact){
                console.log(repertoirContact.descriptionContact());
            });
        }
        else if (choix===2){
            i++;
            var prenom = prompt("Prenom du contact à ajouter :");
            var nom    = prompt("Nom du contact à ajouter :");
            
           var creationContact = Object.create(repertoirContact);
            creationContact.initContact(prenom,nom);
            repertoirContact.push(creationContact);
            if(repertoirContact[i].prenom.length > 0 && repertoirContact[i].nom.length > 0){
                console.log("Contact ajouté");
            }
            else{
                console.log("Il y a eu une erreur lors de l'ajout d'un contact");
            }
        }
        else if (choix===0){
            console.log("Au revoir.");
        }
        else{
            console.log("Choix innatendu");
        }
        
    }while(choix!==0);
    PS:j'ai trouvé le moyen de d'empêcher l'erreur en déclarant le tableau du répertoire de contact juste après la méthode init( entre la ligne 43 et la ligne 44) MAIS cela ne fais que déplacer le problème.
    Si j'ajoute un contact par la suite l'erreur reviens
    Elle apparaît aussi si j'affiche les contacts sans en avoir ajouter un avant.
    Du coup j'ai pensé à mettre une condition du genre déclarer le tableau dans afficher seulement si aucun contact n'a été ajouté, mais la aussi bien évidement il y a erreur si j'ajoute après, enfin je ne sais plus quoi faire cela fais des heures que j'essaie de résoudre ce bête problème, je ne comprends surtout pas pourquoi cela ne fonctionne pas

    -
    Edité par TANIAX 10 janvier 2018 à 23:42:43

    • Partager sur Facebook
    • Partager sur Twitter
      11 janvier 2018 à 4:15:21

      Bonjour,

      C'est une très mauvaise idée de déclarer des variables avec le même nom.

      var x = 2;

      var x = 3;

      Car ici le x = 2; est devenu 'inutile', c'est ce que tu fais à la ligne 1 et 20. Du coup après la ligne 20,  repertoirContact ne represente plus un objet mais un tableau !

      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me mp, venez sur Discord (username: Stelyus#8984)
        11 janvier 2018 à 11:28:51

        Ah, je n'avais pas compris ça dans le cours effectivement ça fonctionne ! merci beaucoup
        • Partager sur Facebook
        • Partager sur Twitter

        Activité 2 : Méthode init n'est pas une fonction

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown