显式原型和隐式原型

// 定义实例对象

function Person () { // 创建函数的时候,内部语句:this.prototype = {}

}

1.每个函数function都有一个prototype,即显式原型(属性)

  console.log(Person.prototype)

2.每个实例对象都有一个__proto__,即称隐式原型(属性)

  // 创建实例对象

  let person = new Person() // js引擎在创建实例的时候,做了一个赋值操作,内部语句:this.__proto__ = Person.prototype

  console.log(person.__proto__)

3.对象的隐式原型的为其对应构造函数的显式原型的值 // 显式原型和隐式原型指向同一个对象,是对象的两个引用

  console.log((person.__proto__ === Person.prototype) // true

 

  // 给原型添加方法

   Person.prototype.test = function () {

    console.log('test()')

  }

  // 通过实例对象调用原型方法

  person.test()

总结:

1.函数的prototype属性:在函数定义时自动添加的,默认值是一个空的object对象

2.对象的__proto__属性:创建对象时自动添加对的默认值为构造函数的prototype属性值

3.程序员可以直接操作显式原型,但是不能直接操作隐式原型(ES6之前)

 

posted on 2020-08-27 14:37  家有糖果  阅读(750)  评论(0)    收藏  举报

导航