有過vue開發經驗的,對於vue.use並不陌生。當使用vue-resource或vue-router等全域元件時,必須透過Vue.use方法引入,才會起作用。那麼vue.use在元件引進之前到底做了那些事情呢?
先上vue.use原始碼
Vue.use = function (plugin) { /* istanbul ignore if */ if (plugin.installed) { return } // additional parameters var args = toArray(arguments, 1); args.unshift(this); if (typeof plugin.install === 'function') { plugin.install.apply(plugin, args); } else if (typeof plugin === 'function') { plugin.apply(null, args); } plugin.installed = true; return this };
假設我們透過Vue.use引入一個插件plugin(該插件可以暫時理解為一個變數或參數),即Vue.use(plugin);
先判斷傳入的參數plugin的屬性installed是否存在,如果存在且邏輯值為真,那麼直接返回,後邊的程式碼就不會在執行,這個判斷的作用是什麼呢?後邊會講到。
我們先假設plugin的屬性installed不存在或為假,那麼繼續往下執行
var args = toArray(arguments, 1)
執行了一個toArray方法,toArray接收了兩個參數,arguments為Vue .use方法傳入的參數集合,例如Vue.use(a,b,c),那麼arguments類似於[a,b,c](說明:arguments只是類別數組,並不是真正的數組)
這裡因為我們只引入一個參數plugin,所以arguments類似[plugin]。
toArray的作用是什麼呢?看源碼。
function toArray (list, start) { start = start || 0; var i = list.length - start; var ret = new Array(i); while (i--) { ret[i] = list[i + start]; } return ret }
當執行toArray(arguments,1),會產生一個新數組ret,長度= arguments.length-1,然後進行while循環,依次倒序把arguments的元素賦值為ret,因為ret比arguments長度少1.
所以最後等同於arguments把除了第一個元素外的其餘元素賦值給ret。 toArray主要作用就是把類別數組轉換成真正的數組,這樣才能呼叫數組的方法。
因為這裡我只引入一個plugin參數,即arguments=[plugin],所以toArray回傳為空數組[]。
接著往下執行,args.unshift(this),等同於[].unshift(Vue),即args = [Vue];
然後執行
if (typeof plugin.install === 'function') { plugin.install.apply(plugin, args); } else if (typeof plugin === 'function') { plugin.apply(null, args); }
此處判斷plugin的install是否為函數,如果為函數,立即執行pluign.install方法,install方法傳入的參數為args內數組元素,即install接受的第一個參數為Vue.
#如果plugin的install不是函數,那麼判斷plugin本身是否為函數,如果為函數,那麼執行plugin函數,且參數為args內數組元素。
最後設定plugin.installed為true。設定plugin.installed為true的作用是避免同一個插件多次執行安裝,例如Vue.use(plugin)執行一次之後,installed為true,再次執行的話走到第一步判斷就返回了。
綜上所述,Vue.use的作用其實就是執行一個plugin函數或執行pluign的install方法進行插件註冊,並且向plugin或其install方法傳入Vue物件作為第一個參數,use的其他參數作為plugin或install的其他參數。
舉個簡單的例子
import Vue from 'vue' function test(a){ console.log(a);//Vue } function test1(a,b){ console.log(a,b);//Vue hello } let oTest = { install:function(a,b){ console.log(a,b);//Vue hello1 } } Vue.use(test); Vue.use(test1,'hello'); Vue.use(oTest,'hello1') console.log(oTest); //{ install:function(){...}, installed:true }
相關推薦:
更多程式相關知識,請造訪:程式設計入門! !
以上是分析一下Vue.use的源碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Vue.js與前端技術棧緊密集成,提升開發效率和用戶體驗。 1)構建工具:與Webpack、Rollup集成,實現模塊化開發。 2)狀態管理:與Vuex集成,管理複雜應用狀態。 3)路由:與VueRouter集成,實現單頁面應用路由。 4)CSS預處理器:支持Sass、Less,提升樣式開發效率。

Netflix選擇React來構建其用戶界面,因為React的組件化設計和虛擬DOM機制能夠高效處理複雜界面和頻繁更新。 1)組件化設計讓Netflix將界面分解成可管理的小組件,提高了開發效率和代碼可維護性。 2)虛擬DOM機制通過最小化DOM操作,確保了Netflix用戶界面的流暢性和高性能。

Vue.js被開發者喜愛因為它易於上手且功能強大。 1)其響應式數據綁定係統自動更新視圖。 2)組件系統提高了代碼的可重用性和可維護性。 3)計算屬性和偵聽器增強了代碼的可讀性和性能。 4)使用VueDevtools和檢查控制台錯誤是常見的調試技巧。 5)性能優化包括使用key屬性、計算屬性和keep-alive組件。 6)最佳實踐包括清晰的組件命名、使用單文件組件和合理使用生命週期鉤子。

Vue.js是一個漸進式的JavaScript框架,適用於構建高效、可維護的前端應用。其關鍵特性包括:1.響應式數據綁定,2.組件化開發,3.虛擬DOM。通過這些特性,Vue.js簡化了開發過程,提高了應用性能和可維護性,使其在現代Web開發中備受歡迎。

Vue.js和React各有優劣,選擇取決於項目需求和團隊情況。 1)Vue.js適合小型項目和初學者,因其簡潔和易上手;2)React適用於大型項目和復雜UI,因其豐富的生態系統和組件化設計。

Vue.js通過多種功能提升用戶體驗:1.響應式系統實現數據即時反饋;2.組件化開發提高代碼復用性;3.VueRouter提供平滑導航;4.動態數據綁定和過渡動畫增強交互效果;5.錯誤處理機制確保用戶反饋;6.性能優化和最佳實踐提升應用性能。

Vue.js在Web開發中的角色是作為一個漸進式JavaScript框架,簡化開發過程並提高效率。 1)它通過響應式數據綁定和組件化開發,使開發者能專注於業務邏輯。 2)Vue.js的工作原理依賴於響應式系統和虛擬DOM,優化性能。 3)實際項目中,使用Vuex管理全局狀態和優化數據響應性是常見實踐。

Vue.js是由尤雨溪在2014年發布的漸進式JavaScript框架,用於構建用戶界面。它的核心優勢包括:1.響應式數據綁定,數據變化自動更新視圖;2.組件化開發,UI可拆分為獨立、可複用的組件。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Dreamweaver CS6
視覺化網頁開發工具