先看個(gè)例子
function User(name){
this.name = name
this.show = function(){
console.log(this.name)
}
return this//不寫默認(rèn)也是返回this
}
let u1 = new User('牛頓')
創(chuàng)建一個(gè)實(shí)例,必須使用new操作符瘤袖。用這種操作符調(diào)用構(gòu)造函數(shù)實(shí)際上會(huì)經(jīng)歷以下4個(gè)階段
- 創(chuàng)建一個(gè)新對(duì)象
- 將構(gòu)造函數(shù)的作用域賦值給新對(duì)象(因此this就指向了新對(duì)象)
換句話說(shuō):讓空對(duì)象的proto(IE沒(méi)有該屬性)成員指向了構(gòu)造函數(shù)的prototype成員對(duì)象
代碼解釋:
let arr = [];//實(shí)際上是let arr = new Array
console.log(arr.__proto__ == Array.prototype)//true
- 執(zhí)行構(gòu)造函數(shù)中的代碼(為這個(gè)新對(duì)象添加屬性)
- 如果構(gòu)造函數(shù)中沒(méi)有返回其它對(duì)象毅戈,那么返回 this舞痰,即返回新對(duì)象引谜,否則型宙,返回構(gòu)造函數(shù)中返回的對(duì)象
詳情請(qǐng)看根據(jù)<JavaScript高級(jí)程序設(shè)計(jì)>這本書(shū)P145頁(yè)