Javascript對象及Proxy工作原理詳解
正文
這一章其實(shí)算是javascript的科普文章,其實(shí)這本書的讀者一般都不會是入門者,因此按道理說應(yīng)該不需要再科普才對。但是作者依舊安排了這一章,證明就是這一章內(nèi)容與我們以為的對象不一樣。
Javascript中一切皆對象
這一句話大家應(yīng)該耳熟能詳,對于常規(guī)的字面量對象,和new出來的對象,大家應(yīng)該都能分辨
const str = ''
const str2 = new String()
const obj = {}
const obj2 = Object.create()
但是根據(jù)ECMA,在javascript中其實(shí)分為2種對象:常規(guī)對象和異質(zhì)對象。任何不屬于常規(guī)對象的都叫異質(zhì)對象。
在javascript的世界中,函數(shù)也是一個(gè)對象。當(dāng)我們指向Obj.foo時(shí),其實(shí)就會調(diào)用對象內(nèi)部[[Get]]方法去獲取這個(gè)值,在ECMA中規(guī)定了如下內(nèi)部方法(網(wǎng)圖)。所以

所以,普通對象必須具有一組被稱為基本內(nèi)部方法(essential internal methods)的方法所定義的默認(rèn)行為,也就是上圖。如果改變了默認(rèn)方法,那么就是異質(zhì)對象。
比如Array,當(dāng)我們把Array.lenght = 0,它會清空數(shù)組。
當(dāng)我看到這張圖就知道了,如何判斷一個(gè)變量到底是普通對象還是函數(shù)呢?答案就是判斷它使用了[[Get]]還是[[Call]]。
毫無疑問,Proxy是異質(zhì)對象,它可以直接性改變一些默認(rèn)方法。當(dāng)我們在Proxy中沒有定義Get攔截器的時(shí)候,他會調(diào)用對象內(nèi)部自己的[[Get]],代理透明.
這一段話我反復(fù)看了很久,才明白它的意思。其實(shí),proxy并不會直接改變對象內(nèi)部方法和行為,它是通過指定需要代理的方法,去執(zhí)行攔截的功能,這也與Proxy的用法符合。
const p = new Proxy(obj,{/*被代理的屬性*/})
這時(shí)候p是與obj完全不相同的對象,有著不一樣的內(nèi)存地址。這就導(dǎo)致,當(dāng)我們不能直接在p上去操縱obj,這時(shí)候我們就要反射Reflect,反射猶如一面鏡子,映照著原始對象的地址,我們?nèi)ゲ僮髟紝ο髈bj,而不是p。
前面2章講了一些關(guān)于Proxy和Reflect的八股文,下一章就是具體講解vue3如何使用Proxy了。
以上就是Javascript對象及Proxy工作原理詳解的詳細(xì)內(nèi)容,更多關(guān)于Javascript對象Proxy的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
使用Bootstrap + Vue.js實(shí)現(xiàn)添加刪除數(shù)據(jù)示例
本篇文章主要介紹了使用Bootstrap + Vue.js實(shí)現(xiàn) 添加刪除數(shù)據(jù)示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02
淺析Vue3中通過v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡化父子組件雙向綁定
這篇文章主要介紹了淺析Vue3中通過v-model實(shí)現(xiàn)父子組件的雙向數(shù)據(jù)綁定及利用computed簡化父子組件雙向綁定,需要的朋友可以參考下2022-12-12
關(guān)于net?6+vue?插件axios?后端接收參數(shù)問題
接到這樣一個(gè)項(xiàng)目需求是這樣的,前端vue?必須對象傳遞后端也必須對象接收,接下來通過本文給大家介紹下net?6+vue?插件axios?后端接收參數(shù)的問題,需要的朋友可以參考下2022-01-01
Element Plus實(shí)現(xiàn)Affix 固釘
本文主要介紹了Element Plus實(shí)現(xiàn)Affix 固釘,Affix組件用于將頁面元素固定在特定可視區(qū)域,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下2021-07-07
在Vue項(xiàng)目中引入騰訊驗(yàn)證碼服務(wù)的教程
這篇文章主要介紹了在Vue項(xiàng)目中引入騰訊驗(yàn)證碼服務(wù)的教程,需要的朋友可以參考下2018-04-04
vue如何實(shí)現(xiàn)Json格式數(shù)據(jù)展示
這篇文章主要介紹了vue如何實(shí)現(xiàn)Json格式數(shù)據(jù)展示,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
解決Vue keep-alive 調(diào)用 $destory() 頁面不再被緩存的情況
這篇文章主要介紹了解決Vue keep-alive 調(diào)用 $destory() 頁面不再被緩存的情況,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10

