1

Can somebody explain what is going on here: code sample 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

code sample 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

How does Object.create manage to mangle its scope when extending the final object?

Akaryatrh
  • 532
  • 2
  • 10
  • 2
    Look at [Object.defineProperties()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties) and [Object.create()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) – Givi Jan 02 '14 at 09:17
  • What does this have to do with scope? Btw, `var classCreate = Object.create`, no additional function needed. – Bergi Jan 02 '14 at 11:03

1 Answers1

1

The second argument in Object.create should be an object of properties given in a very strict format. For example this would work:

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

Read more about it here:

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

freakish
  • 54,167
  • 9
  • 132
  • 169