1.?prototype 即原型對象模叙,它記錄著函數(shù)對象的一些屬性和方法,prototype 對函數(shù)對象是不可見的新啼,prototype 的主要作用就是繼承追城。 通俗一點講,prototype 中定義的屬性和方法都是留給自己的 “后代” 用的燥撞,因此座柱,子類完全可以訪問prototype中的屬性和方法。
2.?__proto__ 物舒,它存在于普通對象和函數(shù)對象中色洞,它的作用就是引用父類的 prototype 對象,JS在通過 new 操作符創(chuàng)建一個對象的時候冠胯,通常會把父類的 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í)行對象的方法時廷雅,先查找對象本身是否存在該方法,如果不存在京髓,會在原型鏈上查找航缀,但不會查找自身的prototype。
5. 一個對象的 __proto__ 記錄著自己的原型鏈堰怨,決定了自身的數(shù)據(jù)類型芥玉,改變 __proto__ 就等于改變對象的數(shù)據(jù)類型。
6. 函數(shù)的 prototype 不屬于自身的原型鏈备图,它是創(chuàng)建子類的核心灿巧,決定了子類的數(shù)據(jù)類型赶袄,是連接子類原型鏈的橋梁。
7. 在原型對象上定義方法和屬性抠藕,是為了被子類繼承和使用饿肺。