new操作符具體都干了什么

一移袍、在JavaScript中,new操作符用于創(chuàng)建一個給定構(gòu)造函數(shù)的實例對象

function Person(name, age){
this.name = name;
this.age = age;
}
Person.prototype.sayName = function () {
console.log(this.name)
}
const person1 = new Person('Tom', 20)
console.log(person1) // Person {name: "Tom", age: 20}
t.sayName() // 'Tom
從上面可以看到:

new 通過構(gòu)造函數(shù) Person 創(chuàng)建出來的實例可以訪問到構(gòu)造函數(shù)中的屬性

new 通過構(gòu)造函數(shù) Person 創(chuàng)建出來的實例可以訪問到構(gòu)造函數(shù)原型鏈中的屬性(即實例與構(gòu)造函數(shù)通過原型鏈連接了起來)

現(xiàn)在在構(gòu)建函數(shù)中顯式加上返回值螟左,并且這個返回值是一個原始類型
function Test(name) {
this.name = name
return 1
}
const t = new Test('xxx')
console.log(t.name) // 'xxx'
可以發(fā)現(xiàn),構(gòu)造函數(shù)中返回一個原始值觅够,然而這個返回值并沒有作用
下面在構(gòu)造函數(shù)中返回一個對象
從上面可以發(fā)現(xiàn),構(gòu)造函數(shù)如果返回值為一個對象喘先,那么這個返回值會被正常使用
流程

從上面介紹中,我們可以看到new關(guān)鍵字主要做了以下的工作:

創(chuàng)建一個新的對象obj

將對象與構(gòu)建函數(shù)通過原型鏈連接起來

將構(gòu)建函數(shù)中的this綁定到新建的對象obj上

根據(jù)構(gòu)建函數(shù)返回類型作判斷窘拯,如果是原始值則被忽略红且,如果是返回對象涤姊,需要正常處理

手寫new操作符
function mynew(Func, ...args) {
// 1.創(chuàng)建一個新對象
const obj = {}
// 2.新對象原型指向構(gòu)造函數(shù)原型對象
obj.proto = Func.prototype
// 3.將構(gòu)建函數(shù)的this指向新對象
let result = Func.apply(obj, args)
// 4.根據(jù)返回值判斷
return result instanceof Object ? result : obj
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暇番,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子思喊,更是在濱河造成了極大的恐慌壁酬,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厨喂,死亡現(xiàn)場離奇詭異蜕煌,居然都是意外死亡派阱,警方通過查閱死者的電腦和手機盒刚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門腺劣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來因块,“玉大人涡上,你說我怎么就攤上這事趾断。” “怎么了吩愧?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵芋酌,是天一觀的道長。 經(jīng)常有香客問我雁佳,道長脐帝,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任糖权,我火速辦了婚禮堵腹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘温兼。我一直安慰自己秸滴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布募判。 她就那樣靜靜地躺著,像睡著了一般咒唆。 火紅的嫁衣襯著肌膚如雪届垫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天全释,我揣著相機與錄音装处,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛妄迁,可吹牛的內(nèi)容都是我干的寝蹈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼登淘,長吁一口氣:“原來是場噩夢啊……” “哼箫老!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起黔州,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤耍鬓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后流妻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牲蜀,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年绅这,在試婚紗的時候發(fā)現(xiàn)自己被綠了涣达。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡证薇,死狀恐怖峭判,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棕叫,我是刑警寧澤林螃,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站俺泣,受9級特大地震影響疗认,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伏钠,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一横漏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧熟掂,春花似錦缎浇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至誉券,卻和暖如春指厌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背踊跟。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工踩验, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓箕憾,卻偏偏與公主長得像牡借,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袭异,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 一扁远、是什么 在JavaScript中俊鱼,new操作符用于創(chuàng)建一個給定構(gòu)造函數(shù)的實例對象 例子 從上面可以看到: ne...
    JerisonPaul閱讀 1,071評論 0 2
  • 如下代碼,通過構(gòu)造函數(shù)創(chuàng)建實例對象: new 共經(jīng)過了4個階段:1.創(chuàng)建一個空對象 2.鏈接到原型 把 obj 的...
    奔跑的丸子129閱讀 10,119評論 0 0
  • new關(guān)鍵字主要的作用是繼承 當(dāng)一個構(gòu)造函數(shù)前加上new的時候畅买,背地里來做了四件事:1.生成一個空的對象并將其作為...
    Allan要做活神仙閱讀 5,818評論 1 1
  • 創(chuàng)建一個空對象 this指向該新創(chuàng)建的對象 該對象的隱式原型指向函數(shù)的原型(prototype屬性) 屬性和方法被...
    風(fēng)雅歡樂閱讀 77評論 0 0
  • 1并闲、創(chuàng)建一個空對象,并且 this 變量引用該對象谷羞,同時還繼承了該函數(shù)的原型帝火。 2、屬性和方法被加入到 this ...
    WPeach閱讀 1,506評論 0 0