Si escribo esto en la consola:

var x = {a: 1};
var y = Object.create(x);
console.log(y);

Muestra {}. Pero si lo ejecuto en Fiddle muestra {a: 1}, que es el resultado esperado. También aquí:

var x = {a: 1};
var y = Object.create(x);
console.log(y);

¿Entonces qué está pasando?

1
ariel 9 jun. 2021 a las 00:44

2 respuestas

La mejor respuesta

Corre como se espera incluso en la consola. Solo tienes que extender el objeto.

enter image description here

2
Fresnel 8 jun. 2021 a las 21:48

Responder

¿Por qué no se oponen las propiedades de clon cree como se esperaba?

Porque Object.create no se supone que clone las propiedades.

Los objetos de JavaScript son complicados.

Si nos fijamos en la documentación de {{x0 }} , dice:

El método Object.Create () crea un nuevo objeto, utilizando un objeto existente como el prototipo del objeto recién creado.

Además de sus propias propiedades, cada objeto en Javascript también hereda las propiedades de su prototipo.

Ahora, la parte complicada es: las propiedades heredadas solo son visibles en algunos casos. Por ejemplo:

  • Accesorio de propiedad - y.a o y['a'] - ✅ ve las propiedades heredadas
    • console.log(y.a); // outputs 1
  • Object.keys, Object.values, Object.entries - ❌ no ve las propiedades heredadas
    • console.log(Object.keys(y)); // outputs []

Estos conceptos están cubiertos mucho más de manera integral en enumerabilidad y propiedad de las propiedades .

Para una explicación más completa de prototipos, consulte prototipos de objetos .

¿Por qué JSFiddle le imprime de manera diferente a Chrome?

Aparentemente, la implementación de JSFiddle de console enumera las propiedades hereditarias, mientras que la implementación de Chrome's console no.

2
rsmeral 8 jun. 2021 a las 22:45