構造函數-->原型--->prototype-->__proto__-->constructor-->原型鏈html
構造函數函數
什麼是構造函數?我理解構造函數就是能夠用來生成實例的函數。this
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,上面的代碼等價於:spa
var Func=new Function('name','this.name=name;this.say=function(){alert("my name is"+this.name);}'); var f=new Func('jack'); f.say();
那麼這就是所謂的構造函數。prototype
原型code
prototypehtm
每一個函數(包括構造函數)都有一個prototype屬性,能夠在這個屬性下面添加新的屬性和方法,在此添加的屬性和方法就會屬於這個函數,這個構造函數new來的全部的實例均可以使用。這個prototype屬性指向的對象,包括自帶的屬性和咱們添加的屬性、方法,我把它指向的對象的內容集合稱爲構造函數的原型。下面是我畫的圖對象
接下來看一個例子,能夠印證上面關於原型的解釋。blog
__proto__原型鏈
每一個對象的實例都會有一個__proto__屬性,這個屬性指向建立它的構造函數的原型。好比var f=new Func();那麼f是Func的實例,那麼f.__proto__就會等價於Func.prototype,即f.__proto__==Func.prototype.
constructor
每一個實例對象會有一個constructor屬性,這個屬性指向的就是建立這個實例的構造函數,同時原型也有這個屬性,指向對應的構造函數。
原型鏈
原型鏈,那麼顧名思義就是一系列的原型組成的鏈條,能夠看到Object,Function,自定義對象,自定義函數,函數實例等原型關係。實例化對象在調用屬性或者方法時,先檢查本身有沒有,本身沒有就會沿着原型鏈一層層的往上搜索。下面是我畫的原型鏈圖,看起來還挺有意思的,好比,Object的原型是Function,Function的原型是它本身,Function原型的原型又是Object的原型。
本文若有有錯誤的地方,還請幫忙指正,感謝。
原文出處:https://www.cnblogs.com/zyskr/p/10765032.html