首先:圖上的三列分別表示實例、構造函數、原型對象。bash
一、實例:經過構造函數new出來的一個對象。函數
function Person(name){
this.name=name
}
var person1=new Person("nanxin") //這裏的 person1 就是實例
複製代碼
二、構造函數:經常用大寫字母開頭,好比 function Person()學習
function Person(name){
this.name=name
}複製代碼
三、原型對象:也就是prototype對象。this
好比:Object.prototype Function.prototype Person.Prototype
這些都是本文中所說的的prototype對象。複製代碼
那三句話是什麼呢?spa
1、每一個實例的__proto__指向該實例構造函數的prototype對象。prototype
//栗子1:
function Person(name){
this.name=name
}
var person1=new Person("nanxin")
//由於person1的構造函數是 Person,因此
person1.__proto__===Person.prototype //true
複製代碼
2、構造函數也屬於函數,因此構造函數的__proto__指向Function.prototype。code
//栗子2:
function Person(name){
this.name=name
}
Person.__proto__===Function.prototype //true
//栗子3:
//Function也是構造函數,是否是超級神奇!
Function.__proto__===Function.prototype //true
//記住這口訣,你就無敵了!複製代碼
3、原型對象本質上也是對象,屬於Object的實例,因此原型對象的__proto__指向Object.prototype。(除了Object.prototype.__proto__===null)cdn
//栗子4:
Function.prototype.__proto__===Object.prototype //true
//栗子5:
function Person(name){
this.name=name
}
Person.prototype.__proto__===Object.prototype //true複製代碼
最後就是Object.prototype的__proto__指向null。這是特例。對象
Object.prototype.__proto__===null //true複製代碼
說的很精簡,可是記住這三句對咱們學習原型鏈真的頗有幫助!blog
有問題歡迎留言!