¿Cómo se usa una función para crear un objeto con Javascript?

Nov 02 2020

Estoy haciendo un curso de JavaScript. Estoy en el capítulo de "Objetos y clases", y no sé cómo resolver algunas asignaciones en mi tarea. El primer ejercicio es así

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

Y esto es lo que estoy intentando

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

Estoy probando la función cargando el script en un archivo index.html, abriendo ese archivo en un navegador y luego probando las funciones en la consola web. Ejecuto la función y no hay problema. Luego, pruebo si el objeto Cat fue devuelto escribiendo Cat.Name en la consola, lo que da como resultado un error. Lo mismo sucede cuando llamo a la función en una línea de código a continuación y luego intento acceder a las propiedades del Objeto. El error dice "ReferenceError: Cat no está definido". ¿Qué estoy haciendo mal? ¡Gracias!

Respuestas

3 Kokodoko Nov 02 2020 at 19:43

Una forma más limpia de hacer esto es omitir la let Cat = {}pieza por completo. Puede utilizar la función en sí para crear un 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

Su función devuelve Cat, pero este es solo un nombre en el alcance de la función. Para usar ese nombre fuera de la función, debe hacer esto:

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

Obtiene este error porque Catsolo se define dentro del alcance de su función. Para definir Catglobalmente, use en window.Catlugar 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 desea obtener su gato cuando escribe en la consola Cat.name, debe declararlo globalmente así:

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

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

Entonces puede acceder a su gato en todo el mundo.

También puede asignar el gato a una variable en la consola del navegador y acceder a ella Cat.nameasí:

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