91精品国产手机在线-白筒袜嫩萝双腿之间乳白液体-青青操手机在线视频观看-日本中文字幕人妻日韩-日韩精品在线观看视频网站-天堂资源中文最新版在线一区-欧美专区一区二区三区-国产综合亚洲欧美在线-国产精品久久久久久福利69堂

前端面試復習(對象):如何自定義一個 new 操作符


前端面試復習(對象):如何自定義一個 new 操作符

前言

近期在復習前端相關知識點,接觸到很多平時業(yè)務涉及不到的東西(你可以理解是些偏語言本身方向的)。

以前一直錯誤的以為我是個“經驗豐富”的前端開發(fā),其實從縱向發(fā)展的深度上看,我依舊語言能力不過關,借這個機會繼續(xù)沉淀自己,讓自己未來能走的更遠。

同時希望在讀的各位多少能有些收獲。

在開始實現(xiàn)這個“怎么自定義一個 new 操作符”問題前,我們先了解這幾個知識點。

什么是對象

首先我們知道 javascript 在對象概念上有別于其他面向對象語言,因為其中沒有 這個概念。

但通俗的講 js 中出現(xiàn)的任何定義可能都是對象,因為:

官方把對象定義為:“無序屬性的集合,其屬性可以包括基本值、對象或者函數(shù)”

像最簡單方式創(chuàng)建的 對象字面量 ,或者一個普通的 function 函數(shù)。

如下,使我們創(chuàng)建對象的一個簡單方式,User 被設定為首字母大寫,當然這只是公認的規(guī)范而已:


前端面試復習(對象):如何自定義一個 new 操作符

構造函數(shù) User


前端面試復習(對象):如何自定義一個 new 操作符

構造函數(shù) User

User 對象的輸出就是我們所定義的那樣,只是 function 被縮寫成 f 而已。

prototype 屬性

每個對象定義出來后(聲明完構造函數(shù)后),就會自帶一個 屬性 prototype ,并且指向 原型對象 Prototype


前端面試復習(對象):如何自定義一個 new 操作符

prototype 屬性

我們在 User.prototype 定義的屬性和方法最終都會掛到 原型對象 上。

原型對象

原型對象 中默認含有一個 constructor 構造函數(shù)引用,并且 constructor 指向構造函數(shù)對象(即: User )。

同時,內部還有個只讀屬性 __proto__ ,指向該構造函數(shù)的原型對象 Object


前端面試復習(對象):如何自定義一個 new 操作符

原型對象

__proto__ 這樣鏈式的引用關系,就是我們平時所指的 原型鏈,當然不是這篇的重點。

對象實例

我們通過 new 操作符來創(chuàng)建 User 對象的實例:


前端面試復習(對象):如何自定義一個 new 操作符

新建 User 對象

根據(jù)構造函數(shù)實例化創(chuàng)建的對象 user 將含有一個 __proto__ 屬性,該屬性也指向 對象原型
所以該 user 實例對象除了可以獲取到 User 對象的屬性外,也能獲取到 prototype 上的屬性,比如: say 方法。


前端面試復習(對象):如何自定義一個 new 操作符

實例對象

實現(xiàn)

我畫了一個簡圖用來歸納上面的一些細節(jié),同時也是下面代碼實現(xiàn)的基礎:


推薦閱讀