Comment utiliser une fonction pour créer un objet avec Javascript?

Nov 02 2020

Je fais un cours en JavaScript. Je suis au chapitre "Objets et classes", et je ne sais pas comment résoudre certains devoirs dans mes devoirs. Le premier exercice est comme ça

function createCat(name,age){
//Create a new object with the property "name" and the value defined by the argument "name".
//Add a new property to the object with the name "age" and use the value defined by the argument"age"
//Add a methos (function) called meow that returns the string "Meow"!
}

Et c'est ce que j'essaye

 function createCat(name,age){
      var Cat={};
        Cat.Name=name;
        Cat.Age=age;
        Cat.meow=function(){return "Meow!"};
        return Cat;
     }

Je teste la fonction chargeant le script dans un fichier index.html, ouvrant ce fichier dans un navigateur, puis testant les fonctions de la console Web. Je lance la fonction et il n'y a pas de problème. Ensuite, je teste si l'objet Cat a été renvoyé en écrivant Cat.Name dans la console, ce qui entraîne une erreur. La même chose se produit lorsque j'appelle la fonction dans une ligne de code ci-dessous, puis que j'essaye d'accéder aux propriétés de l'objet. L'erreur lit "ReferenceError: Cat is not defined". Qu'est-ce que je fais mal? Merci!

Réponses

3 Kokodoko Nov 02 2020 at 19:43

Une façon plus propre de le faire est de laisser complètement de let Cat = {}côté la pièce. Vous pouvez utiliser la fonction elle-même pour créer un Catobjet.

function Cat(name, age) {
    this.name = name;
    this.age = age;
    this.meow = () => console.log("Meow!");
}

let myCat = new Cat("Waldorf", 16)
let anotherCat = new Cat("Statler", 12)

myCat.meow()
console.log(anotherCat.name)
2 BülentAkgül Nov 02 2020 at 18:56

Votre fonction renvoie Cat, mais ce n'est qu'un nom dans la portée de la fonction. Pour utiliser ce nom en dehors de la fonction, vous devez faire ceci:

function createCat(name, age) {
        var cat = {};
        cat.Name = name;
        cat.Age = age;
        cat.meow = () => "Meow!";
        return cat;
}

let Cat = createCat("mist", 16);

console.log(Cat)

1 WaisKamal Nov 02 2020 at 18:46

Vous obtenez cette erreur car elle Catn'est définie que dans le cadre de votre fonction. Pour définir Catglobalement, utilisez window.Catau lieu de var Cat:

function createCat(name, age) {
  window.Cat = {};
  Cat.Name = name;
  Cat.Age = age;
  Cat.meow = function() {
    return "Meow!"
  };
  return Cat;
}

console.log(Cat.Name);

1 SaizFerri Nov 02 2020 at 18:54

Si vous voulez obtenir votre chat lorsque vous tapez sur la console, Cat.namevous devez le déclarer globalement comme ceci:

function createCat(name, age) {
  return {
    name: name,
    age: age,
    meow: function() {
      return "Meow!"
    },
  };
}

window.Cat = createCat('name', 2);

Ensuite, vous pouvez accéder à votre chat dans le monde entier.

Vous pouvez également affecter le chat à une variable sur la console du navigateur et y accéder Cat.namecomme suit:

const Cat = createCat('name', 2);