let animal = { eats: true }; let rabbit = Object.create(animal, { jumps: { value: true, writable: true, configurable: true } }); console.log(rabbit.__proto__); // logs: {eats: true}; console.log(animal); // logs: {eats: true}; console.log(rabbit.jumps); // logs: true; console.log(rabbit); // logs {} La pregunta es: si el conejo está vacío de verdad, ¿qué pasó?
animal - no tiene propiedad de saltos
animal. proto - no tiene propiedad de saltos
conejo - no tiene propiedad de saltos
conejo.saltos - es verdad
Su nueva propiedad no es enumerable; si lo fuera, aparecería en una consola basada en texto (su código original aparece en una consola basada en objetos como Chrome, por ejemplo):
const animal = {eats:true} let rabbit = Object.create(animal, { jumps: { value: true, writable: true, configurable: true , enumerable:true } }); console.log(rabbit.__proto__); // logs: {eats: true}; console.log(animal); // logs: {eats: true}; console.log(rabbit.jumps); // logs: true; console.log(rabbit); // logs as you expected De los documentos para Object.defineProperties() :
enumerable
verdadero si y solo si esta propiedad aparece durante la enumeración de las propiedades en el objeto correspondiente. El valor predeterminado es falso.