Como você usa uma função para criar um objeto com Javascript?

Nov 02 2020

Estou fazendo um curso de JavaScript. Estou no capítulo "Objetos e classes" e não sei como resolver algumas tarefas no meu dever de casa. O primeiro exercício é assim

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"!
}

E é isso que estou tentando

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

Estou testando a função de carregar o script em um arquivo index.html, abrindo esse arquivo em um navegador e testando as funções no console da web. Eu executo a função e não há problema. Em seguida, eu testo se o objeto Cat foi retornado escrevendo Cat.Name no console, o que resulta em um erro. A mesma coisa acontece quando chamo a função em uma linha de código abaixo e tento acessar as propriedades do objeto. O erro diz "ReferenceError: Cat não está definido". O que estou fazendo errado? Obrigado!

Respostas

3 Kokodoko Nov 02 2020 at 19:43

Uma maneira mais limpa de fazer isso é omitir let Cat = {}totalmente a peça. Você pode usar a própria função para criar um Catobjeto.

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

Sua função retorna Cat, mas este é apenas um nome no escopo da função. Para usar esse nome fora da função, você precisa fazer o seguinte:

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

Você obtém este erro porque Catsó é definido dentro do escopo de sua função. Para definir Catglobalmente, use em window.Catvez 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

Se você deseja obter o seu gato ao digitar no console Cat.name, deve declará-lo globalmente assim:

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

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

Em seguida, você pode acessar seu gato globalmente.

Você também pode atribuir o Cat a uma variável no console do navegador e acessá-lo da seguinte Cat.nameforma:

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