原型
構造函數(shù) 睬关,是一種特殊的方法。主要用來在創(chuàng)建對象時初始化對象淮捆。每個構造函數(shù)都有prototype(原型)屬性
每個函數(shù)都有prototype(原型)屬性后室,這個屬性是一個指針砚哆,指向一個對象,
這個對象的用途是包含特定類型的所有實例共享的屬性和方法屑墨,即這個原型對象是用來給實例共享屬性和方法的躁锁。
而每個實例內(nèi)部都有一個指向原型對象的指針。
閉包
簡單來說就是函數(shù)嵌套函數(shù)卵史,內(nèi)部函數(shù)引用來外部函數(shù)的變量战转,從而導致來垃圾回收機制沒有生效,變量被保存來下來以躯。
也就是所謂的內(nèi)存泄漏槐秧,然后由于內(nèi)存泄漏又會導致你項目逐漸變得卡頓等等問題。因此要避免內(nèi)存泄漏忧设。
原型鏈
提到原型鏈就不得不提原型的繼承刁标,繼承的完美實現(xiàn)方案是借助寄生組合繼承,主要實現(xiàn)原理
PersonB.prototype = Object.create(PersonA.prototype)實現(xiàn)來繼承PersonA的原型
當我們通過new關鍵字實例化的對象身上就有了PersonB自身的屬性和方法址晕,也有了PersonA的原型方法
當實例化對象調(diào)用某個方法時會先在自身和原型上查找膀懈,然后是在_proto_上一層層查找,這種方式就是原型鏈谨垃。
vuex
Vuex 是一個專為 Vue.js 應用程序開發(fā)的狀態(tài)管理模式启搂。它采用集中式存儲管理應用的所有組件的狀態(tài)
并以相應的規(guī)則保證狀態(tài)以一種可預測的方式發(fā)生變化。
state:Vuex 使用單一狀態(tài)樹——是的刘陶,用一個對象就包含了全部的應用層級狀態(tài)胳赌。
mutation:更改 Vuex 的 store 中的狀態(tài)的唯一方法是提交 mutation
action: action 提交的是 mutation,而不是直接變更狀態(tài)匙隔。action 可以包含任意異步操作疑苫。
getter: 相當于Vue中的computed計算屬性
vue-router
Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成牡直,讓構建單頁面應用變得易如反掌
<router-link>和<router-view>和<keep-alive>
深拷貝淺拷貝
深拷貝:
通過利用JSON.parse(JSON.stringify(Object))來達到深拷貝的目的
但是JSON深拷貝的缺點是undefined和function還有symbol類型是無法進行深拷貝的
如有需要可以自己手動封裝函數(shù)來達到目的
淺拷貝:
通過ES6新特性Object.assign()與擴展運算符來達到淺拷貝的目的
Vue通信
第一種:props和$emit
第二種:中央事件總線 EventBus(基本不用)
第三種:vuex(狀態(tài)管理器)
第四種:$parent 和 $children
當然還有其他辦法缀匕,但是基本不常用
你在工作終于到那些問題,解決方法是什么
經(jīng)常遇到的問題就是Cannot read property ‘prototype’ of undefined
解決辦法通過瀏覽器報錯提示代碼定位問題碰逸,解決問題
Vue項目中遇到視圖不更新乡小,方法不執(zhí)行,埋點不觸發(fā)等問題
一般解決方案查看瀏覽器報錯饵史,查看代碼運行到那個階段未之行結束满钟,閱讀源碼以及相關文檔等
webpack配置入口出口
module.exports={
//入口文件的配置項
? ? entry:{},
//出口文件的配置項
? ? output:{},
//模塊:例如解讀CSS,圖片如何轉換胜榔,壓縮
? ? module:{},
//插件,用于生產(chǎn)模版和各項功能
? ? plugins:[],
//配置webpack開發(fā)服務功能
? ? devServer:{}
}
Vue原理
Vue是采用數(shù)據(jù)劫持配合發(fā)布者-訂閱者模式湃番,通過Object.defineProperty來()來劫持各個屬性的getter和setter
在數(shù)據(jù)發(fā)生變化的時候夭织,發(fā)布消息給依賴收集器,去通知觀察者吠撮,做出對應的回調(diào)函數(shù)去更新視圖尊惰。
具體就是:
MVVM作為綁定的入口,整合Observe,Compil和Watcher三者泥兰,通過Observe來監(jiān)聽model的變化
通過Compil來解析編譯模版指令弄屡,最終利用Watcher搭起Observe和Compil之前的通信橋梁
從而達到數(shù)據(jù)變化 => 更新視圖,視圖交互變化(input) => 數(shù)據(jù)model變更的雙向綁定效果鞋诗。
Vue路由守衛(wèi)有哪些膀捷,怎么設置,使用場景等
常用的兩個路由守衛(wèi):router.beforeEach 和 router.afterEach
每個守衛(wèi)方法接收三個參數(shù):
to: Route: 即將要進入的目標 路由對象
from: Route: 當前導航正要離開的路由
next: Function: 一定要調(diào)用該方法來 resolve 這個鉤子削彬。
在項目中全庸,一般在beforeEach這個鉤子函數(shù)中進行路由跳轉的一些信息判斷。
判斷是否登錄融痛,是否拿到對應的路由權限等等壶笼。
js是什么語言
js是一種運行在瀏覽器的腳本語言,這種語言主要的功能是可以制作出動態(tài)的頁面的效果
我們可以通過js+css+html布局來形成我們現(xiàn)在可以訪問展示的頁面
js語言是弱語言類型酌心, 因此我們在項目開發(fā)中當我們隨意更該某個變量的數(shù)據(jù)類型后
有可能會導致其他引用這個變量的方法中報錯等等拌消。