Странное поведение Object.create()

Может кто-нибудь объяснить, что здесь происходит: пример кода 1:

o2={b:10};
function classCreate(proto,o){
    return Object.create(proto,o);
}
var o1=classCreate({a:o2},{});
console.log(o1.a.b);  // prints 10

Пример кода 2:

o2={b:10};
function classCreate(proto,o){
    return Object.create(proto,o);
}
var o1=classCreate({},{a:o2});
console.log(o1.a.b);  //reference error

Как Object.create управляет областью действия при расширении конечного объекта?

1 ответ

Второй аргумент в Object.create должен быть объектом свойств, заданных в очень строгом формате. Например, это будет работать:

var o1 = classCreate({}, {a: {value: o2}});

Об этом подробнее здесь:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties

Другие вопросы по тегам