|
|
本质上,object()对传入其中的对象执行了一次浅复制。1234567891011121314var person = { name : "spike", friends : ["Jack","Lux","Brandon"]}var anotherPerson = object(person);anotherPerson.name = "Van";anotherPerson.friends.push = "Frank";var yetAnotherPerson = object(person);yetAnotherPerson.name = "Tom";yetAnotherPerson.friends.push("Joy");console.log(person.firends); // ['Jack','Lux','Brandon','Frank','Joya']
实际上,anotherPerson和yetAnotherPerson相当于person的两个副本
与object(o) 方法相似的 ,还有 Object.create(),如果只传1个参数(一个对象),那么object(o)和Object.create(o)的行为是相同的。
Object.create()还可以传入第二个参数,第二个参数和Object.defineProperties()方法的第二个参数格式相同,第二个参数定义的属性,会覆盖原型链上的属性。
如果想根据某个已有的对象,构造一个新的对象,让这两个对象保持类似,那么可以考虑这种继承方式。一定要注意引用类型的值是被共享的。