What is the difference between using Object.create() and using assignment operator?

自闭症网瘾萝莉.ら 提交于 2019-11-29 17:27:42

var obj2 = Object.create(obj1) creates an empty(!) object with obj1 as its prototype.

obj2.msg = "Hi!" adds(!) the property msg to obj2.

obj2.data.msg = "Hi!" looks for the property data on obj2, but obj2 is empty. So it looks for the property data on the prototype of obj2, which happens to be obj1. Then it changes msg on obj1.data to "Hi".

Zeta

Because Object.create() only creates a shallow copy, nested objects are still referenced and not copied deeply, see 15.2.3.5 (Object.create()) and 15.2.2.1 (new Object()).

If you want to clone an object entirely have a look at How do I correctly clone a JavaScript object? and similar questions.

This is happening because of the way in which java script sets and retrieves properties.For getting a property it looks up the prototype chain while for setting it sets at the most local object.

In the case 2 that is why it does not override.It sets the msg property at obj2.In case 3 It fetches the data object in the parent object and sets the property there.Hence it is overridden.In case 1 they are both referring to same object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!