эй после просмотра в mdn Object.create () MDN Я пытаюсь продублировать их пример, но он не работает
вот что я попробовал и что я получил
const oTest = {a:1,b:2} const test1 = Object.create(oTest) console.log(oTest) //{a: 1, b: 2} console.log(test1 ) //{}
Я ожидал test1 на консоли {a: 1, b: 2}
{a: 1, b: 2}
Может быть, вам нужно использовать Object.assign () для создания копии существующего объекта.
const oTest = {a: 1, b: 2}
const test1 = Object.assign (oTest)
console.log (oTest) // {a: 1, b: 2}
console.log (test1) // {a: 1, b: 2}
Object.create(o) создает пустой объект.Конечно, тот, который наследует свойства от o, но это просто означает, что они доступны при доступе и фактически не копируются в собственные свойства.Ваша консоль показывает только собственные свойства - но если вы развернете объект, она также должна показать цепочку прототипов.
Object.create(o)
o
const oTest = {a:1,b:2}; const test1 = Object.create(oTest); console.log(oTest) // {a: 1, b: 2} console.log(test1) // {} console.log(Object.getPrototypeOf(test1) == oTest) // true console.log(test1.a) // 1
Если вы проверите его, например, с помощью инструментов Chrome Developer, вы увидите прототип объекта и его свойства.
Или вы можете просто console.log(test1.__proto__) просмотреть их таким образом.
console.log(test1.__proto__)
Как сказано в комментариях, существующий объект используется в качестве прототипа для нового созданного объекта.Так что вы не видите его в console.log (по крайней мере, в Node).Попробуйте это в chrome, и будет ли __proto__ иметь ваш объект oTest.
__proto__
Если вы хотите скопировать свойства объекта в новый объект, вы можете const test2 = {...oTest}.Это оператор распространения: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
const test2 = {...oTest}