new Object 与 Object.create()的区别

  • new Object与平时的{}一样,都将属性添加到自身;Object.create()则是将属性添加到隐式原型proto([[prototype]])上
  • Object.create(null) 没有隐式原型;new Object(null)有隐式原型
const obj1 = {
  a: 100,
  b: 200,
  sum() {
    return this.a + this.b
  }
}

const obj2 = new Object({
  a: 100,
  b: 200,
  sum() {
    return this.a + this.b
  }
})

const obj21 = new Object(obj1)

console.log(obj1 === obj2) // false
console.log(obj1 === obj21) // true

const obj3 = Object.create(null) // 没有隐式原型__proto__
const obj4 = Object.create({}) // 有隐式原型
const obj5 = Object.create({
  a: 100,
  b: 200,
  sum() {
    return this.a + this.b
  }
})  // 属性值在隐式原型上

const obj51 = Object.create(obj1)
console.log(obj51 === obj1) // false,一个在__proto__中,一个在自身属性

console.log(obj1)
console.log(obj2)
console.log(obj3)
console.log(obj4)
console.log(obj5)

结果:


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容