JS原型--原型鏈

構造函數-->原型--->prototype-->__proto__-->constructor-->原型鏈函數

構造函數this

   什麼是構造函數?我理解構造函數就是能夠用來生成實例的函數。spa

function Func(name){
this.name=name;
this.say=function(){
  alert('my name is '+this.name);
}
}
var f=new Func('jack');
f.say();

上面的代碼,f是函數Func new出來的實例,f是函數Func的實例,因此Func被稱爲構造函數。那麼 Func的構造函數是誰呢,實際上它就是js內置函數Function,上面的代碼等價於:prototype

var Func=new Function('name','this.name=name;this.say=function(){alert("my name is"+this.name);}');
var f=new Func('jack');
f.say(); 

那麼這就是所謂的構造函數。code

原型對象

prototypeblog

每一個函數(包括構造函數)都有一個prototype屬性,能夠在這個屬性下面添加新的屬性和方法,在此添加的屬性和方法就會屬於這個函數,這個構造函數new來的全部的實例均可以使用。這個prototype屬性指向的對象,包括自帶的屬性和咱們添加的屬性、方法,我把它指向的對象的內容集合稱爲構造函數的原型。下面是我畫的圖原型鏈

接下來看一個例子,能夠印證上面關於原型的解釋。原型

 

__proto__io

 每一個對象的實例都會有一個__proto__屬性,這個屬性指向建立它的構造函數的原型。好比var f=new Func();那麼f是Func的實例,那麼f.__proto__就會等價於Func.prototype,即f.__proto__==Func.prototype.

 

constructor

 每一個實例對象會有一個constructor屬性,這個屬性指向的就是建立這個實例的構造函數,同時原型也有這個屬性,指向對應的構造函數。

 

 

原型鏈

原型鏈,那麼顧名思義就是一系列的原型組成的鏈條,能夠看到Object,Function,自定義對象,自定義函數,函數實例等原型關係。實例化對象在調用屬性或者方法時,先檢查本身有沒有,本身沒有就會沿着原型鏈一層層的往上搜索。下面是我畫的原型鏈圖,看起來還挺有意思的,好比,Object的原型是Function,Function的原型是它本身,Function原型的原型又是Object的原型。

  本文若有有錯誤的地方,還請幫忙指正,感謝。

相關文章
相關標籤/搜索