JavaScript一直強調沒有類的概念,可是JavaScript中咱們也常常須要new一個對象。函數
new是一個運算符,用來調用函數(js中函數能夠做爲普通函數被調用作方法,也能夠經過new來調用做爲一個構造器)this
function Person(name){ this.name = name } let p = new Person('Jay')
其實,在JavaScript中任何對象經過構造器(例如Person)的建立。其實是克隆了一個Object.prototype空對象(js根對象)。spa
克隆一個Object.prototype對象後,初始化將新對象的原型指向Object.prototype。prototype
事實上,除了根對象Object.prototype。任何一個對象都有一個原型。code
像下面這樣常見的建立對象方式,在JavaScript引擎內部,都是進行一樣的操做 —— 克隆對象
let obj1 = {} let obj2 = new Object()
那麼在原型鏈中的操做:blog
let sport = { category: 'ball' } function Tennis(){} Tennis.prototype = sport let t = new Tennis()
主要步驟有兩點:ip
最後補充一點,構造器函數中有兩句語句被隱式執行了,上面的Tennis中原型鏈
function Tennis(){ let this = { __proto__: Tennis.prototype } // ..... // let this.xxx = xxx // ..... return this }