new Object()和Object.create()的区别

330 阅读1分钟
// new Object() 方式创建
var a = {  rep : 'apple' }
var b = new Object(a)
console.log(b) // {rep: "apple"}
console.log(b.__proto__) // {指向Object.prototype}
console.log(b.rep) // apple

// Object.create() 方式创建
var a = { rep: 'apple' }
var b = Object.create(a)
console.log(b)  // {}
console.log(b.__proto__) // {rep: "apple"}
console.log(b.rep) // apple

使用new Object():

  • new运算符是创建一个自定义或者构造函数的内置对象的实例
  • 使用new运算符会创建一个新的对象,它继承自构造函数的prototype,也就是说它的__proto__属性会指向构造函数的prototype
  • new Object(),创建一个具有构造函数的内置对象Object的实例,新创建的对象的__proto__属性会指向Object的prototype

使用 Object.create(proto,propertiesObject):

  • Object.create()是使用指定的原型proto对象及其属性propertiesObject去创建一个新的对象

Object.create可以理解为继承一个对象,所有继承的属性是在新创建对象的原型__proto__下的

console.log(b)  // {}
console.log(b.__proto__) // {rep: "apple"}

这个例子使用 Object.create中访问b.rep时,是通过b的原型链__proto__访问的,并不在b自身下