1.?prototype 即原型對象,它記錄著函數(shù)對象的一些屬性和方法,prototype 對函數(shù)對象是不可見的,prototype 的主要作用就是繼承。 通俗一點(diǎn)講,prototype 中定義的屬性和方法都是留給自己的 “后代” 用的,因此,子類完全可以訪問prototype中的屬性和方法。
2.?__proto__ ,它存在于普通對象和函數(shù)對象中,它的作用就是引用父類的 prototype 對象,JS在通過 new 操作符創(chuàng)建一個(gè)對象的時(shí)候,通常會(huì)把父類的 prototype 賦值給新對象的 __proto__屬性,這樣就形成了一代代傳承。
3.?如圖所示,f.prototype 的 __proto__ 中保存的是 Object.prototype,Object.prototype 對象中也有 __proto__,而從輸出結(jié)果看,Object.prototype.__proto__ 是 null,表示 obj 對象原型鏈的終結(jié)。

4. 原型鏈的形成真正是靠__proto__ 而非prototype,當(dāng)JS引擎執(zhí)行對象的方法時(shí),先查找對象本身是否存在該方法,如果不存在,會(huì)在原型鏈上查找,但不會(huì)查找自身的prototype。
5. 一個(gè)對象的 __proto__ 記錄著自己的原型鏈,決定了自身的數(shù)據(jù)類型,改變 __proto__ 就等于改變對象的數(shù)據(jù)類型。
6. 函數(shù)的 prototype 不屬于自身的原型鏈,它是創(chuàng)建子類的核心,決定了子類的數(shù)據(jù)類型,是連接子類原型鏈的橋梁。
7. 在原型對象上定義方法和屬性,是為了被子類繼承和使用。