создать объект из существующего, используя Object.create () - PullRequest
0 голосов
/ 06 февраля 2019

эй после просмотра в 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}

Ответы [ 4 ]

0 голосов
/ 06 февраля 2019

Может быть, вам нужно использовать 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}

0 голосов
/ 06 февраля 2019

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
0 голосов
/ 06 февраля 2019

Если вы проверите его, например, с помощью инструментов Chrome Developer, вы увидите прототип объекта и его свойства.

Или вы можете просто console.log(test1.__proto__) просмотреть их таким образом.

enter image description here

0 голосов
/ 06 февраля 2019

Как сказано в комментариях, существующий объект используется в качестве прототипа для нового созданного объекта.Так что вы не видите его в console.log (по крайней мере, в Node).Попробуйте это в chrome, и будет ли __proto__ иметь ваш объект oTest.enter image description here

Если вы хотите скопировать свойства объекта в новый объект, вы можете const test2 = {...oTest}.Это оператор распространения: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...