Considering following code:
var obj1 = Object.create({}, {myProp: {value: 1}}); var obj2 = Object.assign({}, {myProp: 1});
Is there any difference between obj1
and obj2
since each object has been created in a different way?
create() is factory construction. You are delegating new() to the factory - the factory looks for overrides and replaces construction of your class with some other derived class. You should always use create() rather than using new() for classes registered with the factory.
The Object.assign() method copies all enumerable own properties from one or more source objects to a target object. It returns the modified target object.
The Object. create() method creates a new object, using an existing object as the prototype of the newly created object.
Let's compare obj1
and obj2
in this code:
var target1 = {}, target2 = {}; var obj1 = Object.create(target1, {myProp: {value: 1}}); var obj2 = Object.assign(target2, {myProp: 1});
Prototypical chain
Object.create
creates a new object with the specified [[Prototype]], and Object.assign
assigns the properties directly on the specified object:
obj1 !== target1; obj2 === target2;
The prototypical chains of obj1
and obj2
look like
obj1 --> target1 --> Object.prototype --> null obj2 --------------> Object.prototype --> null
Properties
Object.create
defines properties and Object.assign
only assigns them.
When creating a property, assignments will create it as configurable, writable and enumerable. When defining a property, you can specify those flags, but by default it's not configurable, nor writable and not enumerable.
Object.getOwnPropertyDescriptor(obj1, 'myProp'); // { value: 1, writable: false, enumerable: false, configurable: false } Object.getOwnPropertyDescriptor(obj2, 'myProp'); // { value: 1, writable: true, enumerable: true, configurable: true }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With