標籤:
每個函數都有一個prototype屬性,這個屬性是指向一個對象的引用,這個對象稱為原型對象,原型對象包含函數執行個體共用的方法和屬性,也就是說將函數用作建構函式調用(使用new操作符調用)的時候,新建立的對象會從原型對象上繼承屬性和方法。
當定義一個函數後通過 “.”為其添加的屬性和函數,通過對象本身仍然可以訪問得到,但是其執行個體卻訪問不到,這樣的變數和函數分別被稱為靜態變數和靜態函數。例如下面代碼:
function Obj(){ }Obj.a=0; //靜態變數 Obj.fn=function(){ //靜態函數 } console.log(Obj.a); //0 console.log(typeof Obj.fn); //function var o=new Obj();console.log(o.a); //undefinedconsole.log(typeof o.fn); //undefined
在物件導向編程中除了一些庫函數我們還是希望在對象定義的時候同時定義一些屬性和方法,執行個體化後可以訪問,JavaScript也能做到這樣,代碼如下:
function Obj(){ this.a=[]; //執行個體變數 this.fn=function(){ //執行個體方法 } } console.log(typeof Obj.a); //undefined console.log(typeof Obj.fn); //undefined var o=new Obj();console.log(typeof o.a); //object console.log(typeof o.fn); //function
無論什麼時候,只要建立了一個新函數,就會根據一組特定的規則為該函數建立一個prototype屬性,預設情況下prototype屬性會預設獲得一個constructor(建構函式)屬性,這個屬性是一個指向prototype屬性所在函數的指標
JavaScript原型prototype