Como você usa uma função para criar um objeto com Javascript?
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
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)
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)
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);
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);