JOSN.parse(JSON.stringify(obj))實現(xiàn)深拷貝的弊端
1.時間對象轉(zhuǎn)換之后會變成字符串奔浅,不再是時間對象
2.對象中有 new regExp 或 Error 對象荔棉,轉(zhuǎn)換之后會得到空對象
3.對象中有方法逗余,undefined , 轉(zhuǎn)換之后會丟失
4.對象中有 NaN 、infinity 和 - infinity , 轉(zhuǎn)換后會變?yōu)?null
5.JSON.stringify()只能序列化對象的可枚舉的自有屬性陆淀,對象中的對象是由構(gòu)造函數(shù)生成的匆瓜,轉(zhuǎn)換后會丟棄對象constructor
6技即、如果對象中存在循環(huán)引用的情況也是無法正確實現(xiàn)深拷貝。
自定義指令
vue2自定義指令生命周期
1.bind 只調(diào)用一次绳瘟,指令第一次綁定到節(jié)點時調(diào)用雕憔,用這個鉤子可以定義一個初始化的操作
2.inserted 被綁定元素插入父節(jié)點時調(diào)用(父節(jié)點存在即可調(diào)用,不必存在于document中)糖声。
3.update 被綁定于元素所在的模板更新時調(diào)用斤彼,而無論綁定值是否變化。通過比較更新前后的綁定值蘸泻,可以忽略不必要的模板更新琉苇。
4.componentUpdated 被綁定元素所在模板完成一次更新周期時調(diào)用。
5.unbind 只調(diào)用一次蟋恬,指令與元素解綁時調(diào)用翁潘。
vue3 自定義指令生命周期
created :綁定元素屬性或事件監(jiān)聽器被應用之前調(diào)用。該指令需要附加需要在普通的 v-on 事件監(jiān)聽器前調(diào)用的事件監(jiān)聽器時歼争,這很有用拜马。
beforeMounted :當指令第一次綁定到元素并且在掛載父組件之前執(zhí)行。 ( 替換 bind )
mounted :綁定元素的父組件被掛載之后調(diào)用沐绒。
beforeUpdate :在更新包含組件的 VNode 之前調(diào)用俩莽。
updated :在包含組件的 VNode 及其子組件的 VNode 更新后調(diào)用。( 替換 componentUpdated )
beforeUnmounted :在卸載綁定元素的父組件之前調(diào)用
unmounted :當指令與元素解除綁定且父組件已卸載時乔遮,只調(diào)用一次扮超。 ( 替換 unbind )
模塊化
模塊化是指解決一個復雜問題的時候,自頂向下 逐層 將系統(tǒng)分割成 若干模塊的過程。 對于整個系統(tǒng)來說出刷,模塊是可組合璧疗,可分解,可替換的單元
編程領域中的模塊化馁龟,就是 遵守固定的規(guī)則 崩侠,把一個大文件 拆成 獨立并依賴的 多個小模塊。
將代碼進行模塊化拆分的好處
1.提高了代碼的 復用性
2.提高了代碼的 可維護性
3.可以實現(xiàn) 按需加載
JavaScript 是單線程還是多線程坷檩? 可不可以實現(xiàn)JS多線程却音?
JavaScript 是單線程
可以實現(xiàn)多線程,通過 web worker 開啟子線程矢炼。Worker 線程在后臺運行系瓢,與主線程互不干擾。
new Worker('worker.js',{name:'name'})
Worker()構(gòu)造函數(shù)句灌,可以接受兩個參數(shù)夷陋。第一個參數(shù)是腳本的網(wǎng)址(必須遵守同源政策),該參數(shù)是必需的涯塔,且只能加載 JS 腳本肌稻,否則會報錯。第二個參數(shù)是配置對象匕荸,該對象可選爹谭。它的一個作用就是指定 Worker 的名稱,用來區(qū)分多個 Worker 線程
想了解更多的話去阮一峰老師的博客瞧瞧 點擊這里