前端經(jīng)典面試題解密:JS的new關(guān)鍵字都干了什么?

前言

new關(guān)鍵字在實(shí)例化獲取對(duì)象時(shí)都做了什么?是一道經(jīng)常出現(xiàn)在前端面試時(shí)的問(wèn)題。如果只是簡(jiǎn)單的了解new關(guān)鍵字是實(shí)例化構(gòu)造函數(shù)獲取對(duì)象,是萬(wàn)萬(wàn)不能夠的。更深入的層級(jí)發(fā)生了什么呢?同時(shí)面試官想從這道題里面考察什么呢?下面胡哥為各位小伙伴一一來(lái)解密。

一、new關(guān)鍵字

new關(guān)鍵字的作用:通過(guò)new關(guān)鍵字實(shí)例化構(gòu)造函數(shù),獲取對(duì)象。說(shuō)一千道一萬(wàn),不如來(lái)段代碼看一看

// 定義構(gòu)造函數(shù)
function Person (name, age) {
    this.name = name
    this.age = age
    
    this.say = function () {
        console.log(`my name is ${this.name}, my age is ${this.age}`)
    }
}

// 構(gòu)造函數(shù)的原型屬性和方法定義
Person.prototype.color = 'yellow'
Person.prototype.sayBye = function () {
    console.log('Bye!')
}

// 實(shí)例化
let p = new Person('胡小帥', 18)
console.log(p)

// 當(dāng)前屬性
console.log(p.name)
// 當(dāng)前方法
p.say()
console.log(p.color)
// 原型方法
p.sayBye()

二、偽代碼演示過(guò)程

通過(guò)new關(guān)鍵字實(shí)例化的對(duì)象p,具備了構(gòu)造函數(shù)Person中this的屬性:name、age,也具備了構(gòu)造函數(shù)Person的原型prototype的屬性color和方法sayBye。下面我們來(lái)通過(guò)偽代碼來(lái)看看具體的實(shí)現(xiàn)過(guò)程。

  1. 初始化新對(duì)象

    var o = {}
    
  2. 原型的執(zhí)行,確定對(duì)象o的原型鏈

    o.__proto__ = Person.prototype
    
  3. 綁定this對(duì)象為o,傳入?yún)?shù);執(zhí)行Person構(gòu)造函數(shù),進(jìn)行屬性和方法的賦值操作

    Person.call(o, '胡小帥', 18)
    
  4. 返回結(jié)果

    注意:在通過(guò)該種方式獲取對(duì)象時(shí),最終不一定返回的是對(duì)象o,要看構(gòu)造函數(shù)的返回值是什么。

    如果函數(shù)返回的是基本類(lèi)型值,實(shí)際會(huì)生成一個(gè)對(duì)象,返回o
    如果是函數(shù)返回的是引用類(lèi)型值,則實(shí)際返回的是該引用類(lèi)型值
    

后記

以上就是胡哥今天給大家分享的內(nèi)容,喜歡的小伙伴記得收藏、轉(zhuǎn)發(fā)、點(diǎn)擊右下角按鈕在看,推薦給更多小伙伴呦,歡迎多多留言交流...

胡哥有話說(shuō),一個(gè)有技術(shù),有情懷的胡哥!現(xiàn)任京東前端攻城獅一枚。
胡哥有話說(shuō),專(zhuān)注于大前端技術(shù)領(lǐng)域,分享前端系統(tǒng)架構(gòu),框架實(shí)現(xiàn)原理,最新最高效的技術(shù)實(shí)踐!

長(zhǎng)按掃碼關(guān)注,更帥更漂亮呦!關(guān)注胡哥有話說(shuō)公眾號(hào),可與胡哥繼續(xù)深入交流呦!

胡哥有話說(shuō)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第5章 引用類(lèi)型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類(lèi)型 使用基本類(lèi)型...
    大學(xué)一百閱讀 3,674評(píng)論 0 4
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,800評(píng)論 0 3
  • 回想起童年,發(fā)現(xiàn)自己的許多時(shí)光其實(shí)是伴著游戲長(zhǎng)大的,從小時(shí)候的超級(jí)瑪麗,俄羅斯方塊,到后來(lái)火的一塌糊涂的植物大戰(zhàn)僵...
    吳世升飛閱讀 541評(píng)論 0 2
  • 你想成就的一切你都可以成就,秘訣就在在于,這個(gè)你是誰(shuí)? 我的認(rèn)知系統(tǒng)很精密,自我定義吸引信息歸類(lèi)的核心磁鐵。 自我...
    談小談閱讀 184評(píng)論 0 0
  • 昨天下午上了一堂非常燒腦的語(yǔ)言邏輯訓(xùn)練課,這堂課主要講了四個(gè)方面。第一方面:演繹邏輯話術(shù)分解。第二個(gè)方面:論證方程...
    優(yōu)樂(lè)維兒閱讀 1,131評(píng)論 0 0

友情鏈接更多精彩內(nèi)容