Como se puede ver a continuación es mi código. He creado dos objetos, halógeno y globo, y les he dado la propiedad de halógeno de cantar y la propiedad de globo de leer. Estoy llamando a halogen.read () está obteniendo la propiedad de lectura, pero el halógeno es un prototipo de globo, pero el globo no es un prototipo de halógeno. ¿Cómo funciona js bajo el capó?
const halogen = { sing: function() { console.log('I can sing'); } } const balloon = new Object(halogen); balloon.read = function() { console.log('I can read'); } halogen.read();Cuando llama al constructor de Object con un argumento que no es null o undefined , no crea un nuevo objeto (ni siquiera cuando usa new , sorprendentemente; enlace de especificación ), simplemente convierte el argumento en objeto si es ' ya es un objeto y lo devuelve. Dado que halogen ya se refiere a un objeto, no se requiere conversión y básicamente estás haciendo balloon = halogen y ambos terminan refiriéndose al mismo objeto.
Probablemente quisiste usar Object.create , que crea un nuevo objeto y asigna el argumento del objeto que proporcionas como el prototipo del nuevo objeto:
const halogen = { sing: function() { console.log("I can sing"); }, }; const balloon = Object.create(halogen); balloon.read = function() { console.log("I can read"); }; console.log(typeof halogen.read); // undefined console.log(typeof balloon.read); // function console.log(typeof balloon.sing); // function