一.什么是原型?

 每个函数都有一个原型(prototype)属性,默认指向一个空的object对象(原型中的constructor指向函数本身)

   

 

 

  

 

 

   原型的作用:我们可以在构造函数的原型上添加属性和方法(一般都是方法),这样它的实例对象都可以使用原型上的实例 和方法

二.显示原型和隐式原型

1.每个function都有一个显示原型,即prototype,是在定义函数时自动添加的

   如定义一个Person构造函数,其中就有prototype属性

  

 

  

 

 2.每个实例对象都有一个隐式原型,即_ _proto_ _,是在new一个实例对象是自动添加的

    new一个实例对象student,该实例对象上有一个_ _proto_ _属性

    

 

   

 

 3.实例对象隐式原型的值等于其对应构造函数的显示原型的值

   

 

 4.程序员只能操作显示原型,不能操作隐式原型

 

三.原型链

1.访问一个对象的属性和方法时,先在自身查找,找到就返回;

如果自身没有,沿着_ _proto_ _一直向上查找,找到就返回

如果找不到,返回undefined

2.原型链的尽头是null

实例对象的_ _proto_ _===构造函数的prototype,是一个object,object的_ _proto_ _===Object的prototype,是Object的原型对象(Object.prototype),Object的原型对象再顺着_ _proto_ _ 向上查找,Object.prototype._ _proto_ _  = null

 

 这里特别绕,必须一步一步顺着思路走才能不懵逼