美文网首页
new Object 和 Object.create()的区别?

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

作者: 泡杯感冒灵 | 来源:发表于2020-07-26 10:55 被阅读0次

    对象字面量和new Object()方式创建的对象的隐式原型(__proto__)都会指向 Object的显示原型上(也就是Object.prototype)

    // 对象字面量
    const obj1 = {
      a: 10,
      b: 20,
      sum: function () {
        return this.a+this.b
      }
    }
    
    
    // new Object
    const obj2 = new Object({
      a: 10,
      b: 20,
      sum: function () {
        return this.a+this.b
      }
    })
    
    console.log(obj1 === obj2)  // false
    console.log(obj1.__proto__ === Object.prototype)  // true
    console.log(obj1.__proto__ === obj2.__proto__) // true
    
    // 但是如果用new Object创建对象的时候,如果传入的参数是一个已经定义好的对象的变量,那么创建的对象就跟参数本身是指向同一个对象的。
    const obj2 = new Object(obj1) 
    console.log(obj1 === obj2)  // true
    

    Object.create()

    // 当我们用 Object.create创建一个对象,并且参数为null的时候,会创建一个空对象
    // 此时这个空对象是没有原型的
    const obj3 = Object.create(null)
    console.log(obj3)
    
    image.png
    // 当我们用new Object()方式创建一个空对象的时候,空对象是有原型的。
    const obj4 = new Object()
    console.log(obj4)
    
    image.png
    // 我们通过给Object.create()传一个对象作为参数创建对象
    // 此时的对象依然是空对象,但是这个空对象的原型已经是指向了传入的这个参数了
    const obj5 = Object.create({
      a: 10,
      b: 20,
      sum: function () {
        return this.a+this.b
      }
    })
    console.log(obj5)
    
    image.png
    // 这里的意思是,我们以obj1为原型,创建一个对象,并把对象赋值给obj6
    // 此时obj6可以通过原型获取到obj1的所有属性和方法
    // 当obj1的属性改变时,obj6也会改变
    const obj6 = Object.create(obj1)
    console.log(obj1)
    console.log(obj6)
    console.log(obj6.__proto__ === obj1) // true
    obj1.c = 100
    console.log(obj6.c)
    
    image.png

    相关文章

      网友评论

          本文标题:new Object 和 Object.create()的区别?

          本文链接:https://www.haomeiwen.com/subject/zqjmlktx.html