Si Object.create hace una nueva copia profunda del objeto, ¿qué debería suceder después de eliminar la propiedad del objeto recién creado?
Salida esperada: indefinido
Salida real: Karna
Código
var obj1 = {name:"Karna",loc:"Bengaluru"}; var obj2 = Object.create(obj1); delete obj2.name; console.log(obj2.name);¿Podría ayudarme a entender por qué obj2.name todavía se refiere a la propiedad de obj1?
Object.create crea un nuevo objeto con el argumento object como prototipo del nuevo objeto creado (consulte el __proto__ del objeto recién creado). No agrega las propiedades de obj1 a obj2 . Entonces, si invocas delete en obj2 , eliminará las propiedades de obj2 y no las del prototipo.
Ejemplo:
var obj1 = { name: 'John' } var obj2 = Object.create(obj1); console.log(obj2.__proto__ === obj1) // returns true console.log(obj2.hasOwnProperty('name')) // returns false; console.log(obj2.name) // returns John delete obj2.name; // returns true console.log(obj2.name) // returns John, since delete will not traverse the prototype chain to delete keysMás información: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create
Hay dos puntos a los que debe prestar atención: 1- Object.create no hace una copia del objeto original, crea un nuevo objeto con el argumento object como prototipo del nuevo objeto creado. (la propiedad del prototipo no es una propiedad configurable) 2- el operador de eliminación solo funciona en las propiedades configurable de un objeto.
por lo tanto, las propiedades del prototipo no se pueden delete mediante el operador de eliminación, porque no se pueden configurar.