前端面試復習(對象):如何自定義一個 new 操作符
前言
近期在復習前端相關知識點,接觸到很多平時業(yè)務涉及不到的東西(你可以理解是些偏語言本身方向的)。
以前一直錯誤的以為我是個“經驗豐富”的前端開發(fā),其實從縱向發(fā)展的深度上看,我依舊語言能力不過關,借這個機會繼續(xù)沉淀自己,讓自己未來能走的更遠。
同時希望在讀的各位多少能有些收獲。
在開始實現(xiàn)這個“怎么自定義一個 new 操作符”問題前,我們先了解這幾個知識點。
什么是對象
首先我們知道 javascript 在對象概念上有別于其他面向對象語言,因為其中沒有 類 這個概念。
但通俗的講 js 中出現(xiàn)的任何定義可能都是對象,因為:
官方把對象定義為:“無序屬性的集合,其屬性可以包括基本值、對象或者函數(shù)”
像最簡單方式創(chuàng)建的 對象字面量 ,或者一個普通的 function 函數(shù)。
如下,使我們創(chuàng)建對象的一個簡單方式,User 被設定為首字母大寫,當然這只是公認的規(guī)范而已:
構造函數(shù) User
構造函數(shù) User
User 對象的輸出就是我們所定義的那樣,只是 function 被縮寫成 f 而已。
prototype 屬性
每個對象定義出來后(聲明完構造函數(shù)后),就會自帶一個 屬性 prototype ,并且指向 原型對象 Prototype:
prototype 屬性
我們在 User.prototype 定義的屬性和方法最終都會掛到 原型對象 上。
原型對象
原型對象 中默認含有一個 constructor 構造函數(shù)引用,并且 constructor 指向構造函數(shù)對象(即: User )。
同時,內部還有個只讀屬性 __proto__ ,指向該構造函數(shù)的原型對象 Object :
原型對象
__proto__ 這樣鏈式的引用關系,就是我們平時所指的 原型鏈,當然不是這篇的重點。
對象實例
我們通過 new 操作符來創(chuàng)建 User 對象的實例:
新建 User 對象
根據(jù)構造函數(shù)實例化創(chuàng)建的對象 user 將含有一個 __proto__ 屬性,該屬性也指向 對象原型 。
所以該 user 實例對象除了可以獲取到 User 對象的屬性外,也能獲取到 prototype 上的屬性,比如: say 方法。
實例對象
實現(xiàn)
我畫了一個簡圖用來歸納上面的一些細節(jié),同時也是下面代碼實現(xiàn)的基礎:
推薦閱讀
- 葉璇報名參加杭州2022年亞運會志愿者面試,毀譽參半的她能入選嗎
- 41歲葉璇報名杭州亞運志愿者 與其它面試者合影留念十分隨和
- 29歲TVB藝人自曝考公務員,筆試通過已獲邀面試,職位薪資5.5萬元
- 那英曾兩次參加歌舞團面試,卻都以失敗告終,感覺自己會一事無成
- 張藝興參加MBA面試,高中學歷引發(fā)爭議。網友:佩服!
- 粉絲通過面試,成TNT團綜工作人員,打破時代峰峻不招粉絲的規(guī)定
- 他面試的時候被稱為“教科書級別”,履歷豐富,從容自信
- 李汶翰錄綜藝態(tài)度惡劣,面試幾乎為零分,回答說只要不墊底就行
- 青你2:蔡徐坤組面試者爆棚,金子涵出局和虞書欣一組,厲害了!
- 楊紫面試蘇有朋的電影被淘汰了!面對面詢問后,有朋哥回復好直接
