1. 程式人生 > >JS的原型鏈,這個圖你沒見過

JS的原型鏈,這個圖你沒見過

想到Objective-C有個isa指標,物件的isa指向類,類的isa指向元類,元類的isa指向自己。正是有了isa指標,才有了強大的runtime功能。

那麼,前端技術js也有自己的指向關係,這裡借用《JavaScript高階程式設計》中的描述:

  1. 每個建構函式都有一個原型物件(prototype)
  2. 原型物件都包含一個指向建構函式的指標(constructor)
  3. 例項都包含一個指向原型物件的內部指標(__proto__指向prototype)

看到第1,2的時候,大腦中應該有個環形影象。結合下面程式碼,總結一下:

function Person(name){
 this.name=name; 
}
 Person.prototype.printName=function(){
	 alert(this.name);
 } 
var person1=new Person(‘Byron’); 
var person2=new Person('Frank');

有如下圖:

每一個物件都有一個__proto__,只有函式物件才有prototype。整體上都是從左向右找原型。Object.prototype的__proto__是null

constructor指向了本身(圖中灰色虛線)