原型链理解


1. 原型概念理解: 构造函数,原型对象, 实例对象

    每一个构造函数在创建的时候系统会创建一个该函数的实例对象作为默认原型 Phone.prototype = new Phone(); 

    当其实例化时,生成一个实例对象  let phone = new Phone(); 

    

    其中使用 Phone.prototype 及 phone.__proto__  访问原型对象

    在构造函数创建后,用 Phone.prototype.(要创建的属性及方法) 为其原型对象赋值,如 

    

2. 原型链的理解

    原型链实际上为 函数.__proto__.__proto__.__proto__——>null (Object) 的搜索链

    如上所述, 函数名.__proto__ 可以访问该函数的原型对象, 当浏览器访问该函数的方法或属性时,会优先搜索该函数本身;当该函数本身没有所需的属性或方法,就会搜索它原型对象是否含有;若也没有,将访问原型对象的原型对象。

    一直搜索到找到所需方法或属性 或 函数的 .__proto__ 对象为 null ,意为搜索到  Object.prototype; Object.prototype为所有原型链的终点 .__proto__ 为 null